SQL Server:任何等效的strpos()?

时间:2009-07-08 18:56:01

标签: sql sql-server syntax strpos

我正在处理一个烦人的数据库,其中一个字段包含两个单独字段应该存储的内容。所以列存储的内容类似于“第一个字符串〜@〜第二个字符串”,其中“〜@〜”是分隔符。 (同样,我没有设计这个,我只是想解决它。)

我想要一个查询将其移动到两列,看起来像这样:

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

但是我找不到与strpos相同的任何东西。

3 个答案:

答案 0 :(得分:35)

用户charindex:

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

Link

答案 1 :(得分:10)

PatIndex函数应该为您提供模式作为字符串一部分的位置。

PATINDEX ( '%pattern%' , expression )

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

答案 2 :(得分: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)-@intPos)
    END
    IF LEN(@strList)>0 
        INSERT INTO @retTable (intValue) values (CONVERT(int, @strList))

    RETURN

END

只需用你的分隔符替换函数中的','(或者甚至可以参数化它)