SQL服务器:strpos任何相等于()?(SQL Server: any equivalent o

2019-06-25 11:05发布

我负责的一个恼人的数据库,其中一个字段包含真正应存放两个独立的领域。 所以列存储东西,如“第一个字符串〜@〜第二个字符串”,其中“〜@〜”是分隔符。 (同样,我没有设计这个,我只是试图修复它。)

我想迁移到两列的查询,这将是这个样子:

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

但我找不到任何相当于strpos存在。

Answer 1:

用户CHARINDEX:

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

链接



Answer 2:

PATINDEX函数应该给你的图案的位置作为一个字符串的一部分。

PATINDEX ( '%pattern%' , expression )

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



Answer 3:

如果您需要在资料栏这里是我使用:

  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

只需用分隔符来替换“”在函数(或者甚至是参数化)



文章来源: SQL Server: any equivalent of strpos()?