SQL Server: cualquier equivalente de strpos ()?
-
11-09-2019 - |
Pregunta
Estoy tratando con una base de datos donde se molesto campo contiene lo que realmente se deben almacenar dos campos separados. Por lo que la columna se almacena algo así como "La primera cadena ~ @ ~ La segunda cadena", donde "~ @ ~" es el delimitador. (Una vez más, no diseñó esto, sólo estoy tratando de solucionarlo.)
Quiero una consulta para mover este en dos columnas, que sería algo como esto:
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 ningún equivalente a strpos.
Solución
Otros consejos
La función patindex debe darle la ubicación del patrón como una parte de una cadena.
PATINDEX ( '%pattern%' , expression )
Si necesita los datos en columnas aquí es lo que yo 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
Sólo tiene que sustituir '', en la función con el delimitador (o tal vez incluso parametrizar ella)