我负责的一个恼人的数据库,其中一个字段包含真正应存放两个独立的领域。 所以列存储东西,如“第一个字符串〜@〜第二个字符串”,其中“〜@〜”是分隔符。 (同样,我没有设计这个,我只是试图修复它。)
我想迁移到两列的查询,这将是这个样子:
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
只需用分隔符来替换“”在函数(或者甚至是参数化)