2009-07-08 34 views
15

我正在處理一個惱人的數據庫,其中一個字段包含真正應該存儲兩個單獨字段的內容。所以該列被存儲爲「第一個字符串〜@〜第二個字符串」,其中「〜@〜」是分隔符。 (同樣,我沒有設計這個,我只是試圖修復它。)SQL Server:任何等效的strpos()?

我想查詢到該移動爲兩列,這將是這個樣子:

UPDATE UserAttributes 
SET str1 = SUBSTRING(Data, 1, STRPOS(Data, '[email protected]~')), 
    str2 = SUBSTRING(Data, STRPOS(Data, '[email protected]~')+3, LEN(Data)-(STRPOS(Data, '[email protected]~')+3)) 

但我找不到任何與strpos相當的存在。

回答

34

用戶CHARINDEX:

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

Link

+0

重要的是要注意,如果您將針和乾草堆的順序保持爲相同的順序,則會在此處切換參數的順序,導致大量的「字符串或二進制數據將被截斷」錯誤strpos。 – Noumenon 2017-10-03 21:48:43

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)[email protected]) 
    END 
    IF LEN(@strList)>0 
     INSERT INTO @retTable (intValue) values (CONVERT(int, @strList)) 

    RETURN 

END 

只需更換「」在功能與您的分隔符(或者甚至參數化的話)