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

SQL Server:是否有任何等效的strpos()?,sql,sql-server,syntax,strpos,Sql,Sql Server,Syntax,Strpos,我正在处理一个恼人的数据库,其中一个字段包含实际上应该存储在两个单独字段中的内容。因此,该列的存储方式类似于“第一个字符串~@~第二个字符串”,其中“~@~”是分隔符。(再说一遍,这不是我设计的,我只是想修复它。) 我想要一个查询,将其移动到两列中,如下所示: UPDATE UserAttributes SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '~@~')), str2 = SUBSTRING(Data, STRPOS(Data, '~@~'

我正在处理一个恼人的数据库,其中一个字段包含实际上应该存储在两个单独字段中的内容。因此,该列的存储方式类似于“第一个字符串~@~第二个字符串”,其中“~@~”是分隔符。(再说一遍,这不是我设计的,我只是想修复它。)

我想要一个查询,将其移动到两列中,如下所示:

UPDATE UserAttributes
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '~@~')),
    str2 = SUBSTRING(Data, STRPOS(Data, '~@~')+3, LEN(Data)-(STRPOS(Data, '~@~')+3))
但是我找不到任何与strpos等价的东西。

用户charindex:

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

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

PATINDEX ( '%pattern%' , expression )

如果您需要列中的数据,我将使用以下方法:

  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

只需将函数中的“,”替换为您的分隔符(甚至可以将其参数化)

重要的是要注意,参数的顺序在此处切换,如果您将指针和干草堆的顺序与strpos相同,则会导致大量“字符串或二进制数据将被截断”错误。