Pergunta

Eu estou lidando com um banco de dados chato onde um campo contém o que realmente deve ser armazenado dois campos separados. Então, a coluna é armazenada algo como "A primeira cadeia ~ @ ~ A segunda string", onde "~ @ ~" é o delimitador. (Mais uma vez, eu não projetar isto, eu só estou tentando corrigi-lo.)

Eu quero uma consulta para mover este em duas colunas, que seria algo parecido com isto:

UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '~@~')),
    str2 = SUBSTRING(Data, STRPOS(Data, '~@~')+3, LEN(Data)-(STRPOS(Data, '~@~')+3))

Mas eu não posso achar que qualquer equivalente a strpos existe.

Foi útil?

Solução

charindex Usuário:

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

Fazer a ligação

Outras dicas

A função PATINDEX deve dar-lhe a localização do padrão como uma parte de uma string.

PATINDEX ( '%pattern%' , expression )

http://msdn.microsoft.com/en-us/library/ ms188395.aspx

Se você precisa de seus dados em colunas aqui é o que eu 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)-@intPos)
    END
    IF LEN(@strList)>0 
        INSERT INTO @retTable (intValue) values (CONVERT(int, @strList))

    RETURN

END

Basta substituir '' na função com o delimitador (ou talvez mesmo parametrizar-lo)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top