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

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

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 )

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

如果您需要在此列数据是我使用:

  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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top