SQL Server: qualquer equivalente de strpos ()?
-
11-09-2019 - |
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.
Soluçã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 )
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