SQL Server: un équivalent de strpos ()?

J'ai affaire à une database ennuyeuse où un champ contient ce qui devrait vraiment être stocké deux champs séparés. Ainsi, la colonne est stockée quelque chose comme "La première string ~ @ ~ La deuxième string", où "~ @ ~" est le délimiteur. (Encore une fois, je n'ai pas conçu cela, j'essaie juste de le réparer.)

Je veux une requête pour déplacer cela en deux colonnes, cela ressemblerait à ceci:

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

Mais je ne trouve pas qu'il existe d'équivalent à des strpos.

Utilisateur charindex:

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

Lien

La fonction PatIndex devrait vous donner l'location du motif en tant que partie d'une string.

 PATINDEX ( '%pattern%' , expression ) 

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

Si vous avez besoin de vos données dans des colonnes, voici ce que j'utilise:

  create FUNCTION [dbo].[fncTableFromCommaSsortingng] (@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 

Remplacez simplement ',' dans la fonction avec votre délimiteur (ou peut-être même le paramétrer)