2009-07-08 17 views
15

Ho a che fare con un database fastidioso in cui un campo contiene ciò che dovrebbe essere effettivamente memorizzato in due campi separati. Quindi la colonna è memorizzata come "La prima stringa ~ @ ~ La seconda stringa", dove "~ @ ~" è il delimitatore. (Anche in questo caso, non ho progettare questo, sto solo cercando di risolvere il problema.)SQL Server: qualsiasi equivalente di strpos()?

Voglio una query per spostare questo in due colonne, che sarebbe simile a questa:

UPDATE UserAttributes 
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '[email protected]~')), 
    str2 = SUBSTRING(Data, STRPOS(Data, '[email protected]~')+3, LEN(Data)-(STRPOS(Data, '[email protected]~')+3)) 

Ma Non riesco a trovare che esista un equivalente di strpos.

risposta

34

charindex utente:

Select CHARINDEX ('S','MICROSOFT SQL SERVER 2000') 
Result: 6 

Link

+0

È importante notare che l'ordine degli argomenti viene commutato qui, portando a un sacco di errori "String o dati binari verranno troncati" se si lascia l'ago e il pagliaio nello stesso ordine di strpos. – Noumenon

0

Se avete bisogno dei vostri dati nelle colonne qui è quello che io uso:

create FUNCTION [dbo].[fncTableFromCommaString] (@strList varchar(8000)) 
RETURNS @retTable Table (intValue int) AS 
BEGIN 

    DECLARE @intPos tinyint 

    WHILE CHARINDEX(',',@strList) > 0 
    BEGIN 
     SET @intPos=CHARINDEX(',',@strList) 
     INSERT INTO @retTable (intValue) values (CONVERT(int, LEFT(@strList,@intPos-1))) 
     SET @strList = RIGHT(@strList, LEN(@strList)[email protected]) 
    END 
    IF LEN(@strList)>0 
     INSERT INTO @retTable (intValue) values (CONVERT(int, @strList)) 

    RETURN 

END 

basta sostituire '' nella funzione con il delimitatore (o forse anche parametrizzare esso)

Problemi correlati