2009-07-08 34 views
15

私は本当に2つの別々のフィールドに格納されるべきものが1つのフィールドに含まれている厄介なデータベースを扱っています。したがって、列は "最初の文字列〜@〜第2文字列"のように格納されます。 "〜@〜"は区切り文字です。 (繰り返しますが、私はちょうどそれを修正しようとしている、これを設計していませんでした。)SQL Server:strpos()に相当するものはありますか?

は、私は、それがこのようなものになり、クエリが2列にこれを移動する:

UPDATE UserAttributes 
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '[email protected]~')), 
    str2 = SUBSTRING(Data, STRPOS(Data, '[email protected]~')+3, LEN(Data)-(STRPOS(Data, '[email protected]~')+3)) 

をしかし、 strposと同等のものは存在しません。

答えて

34

ユーザーCHARINDEX:

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

Link

+0

引数の順序はここで切り替えられ、needleとhaystackを同じ順序で残すと、多くの "文字列またはバイナリデータが切り捨てられます"というエラーが発生することに注意してくださいstrpos。 – Noumenon

0

あなたがここに列のデータが必要な場合は、私が使用するものです:あなたの区切り文字で関数内で「」

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)[email protected]) 
    END 
    IF LEN(@strList)>0 
     INSERT INTO @retTable (intValue) values (CONVERT(int, @strList)) 

    RETURN 

END 

ちょうど交換する(または多分それをパラメータ)

関連する問題