izquierda - sql server substring
SQL Server: cualquier equivalente de strpos()? (3)
Estoy lidiando con una base de datos molesta donde un campo contiene lo que realmente debería almacenarse dos campos separados. Así que la columna se almacena algo así como "La primera cadena ~ @ ~ La segunda cadena", donde "~ @ ~" es el delimitador. (De nuevo, no diseñé esto, solo estoy tratando de arreglarlo).
Quiero una consulta para mover esto a dos columnas, que se vería así:
UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, ''~@~'')),
str2 = SUBSTRING(Data, STRPOS(Data, ''~@~'')+3, LEN(Data)-(STRPOS(Data, ''~@~'')+3))
Pero no puedo encontrar que exista un equivalente a strpos.
La función PatIndex debería darle la ubicación del patrón como parte de una cadena.
PATINDEX ( ''%pattern%'' , expression )
Si necesita sus datos en columnas aquí, es lo que 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
Simplemente reemplace '','' en la función con su delimitador (o tal vez incluso parametrizarlo)