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.

¿Fue útil?

Solución

charindex usuario:

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

Enlace

Otros consejos

La función patindex debe darle la ubicación del patrón como una parte de una cadena.

PATINDEX ( '%pattern%' , expression )

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

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top