2009-07-08 41 views
15

Tôi đang xử lý một cơ sở dữ liệu gây phiền nhiễu trong đó một trường chứa những gì thực sự cần được lưu trữ hai trường riêng biệt. Vì vậy, cột được lưu trữ một cái gì đó như "Chuỗi đầu tiên ~ @ ~ Chuỗi thứ hai", trong đó "~ @ ~" là dấu phân tách. (Một lần nữa, tôi không thiết kế này, tôi chỉ cố gắng để sửa chữa nó.)SQL Server: bất kỳ tương đương strpos()?

Tôi muốn có một truy vấn để di chuyển này thành hai cột, đó sẽ giống như thế này:

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)) 

Nhưng Tôi không thể thấy rằng bất kỳ tương đương với strpos tồn tại.

Trả lời

34

tài charindex:

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

Link

+0

Điều quan trọng cần lưu ý là thứ tự các đối số được chuyển đến đây, dẫn đến rất nhiều lỗi "Chuỗi hoặc dữ liệu nhị phân sẽ bị cắt ngắn" nếu bạn để kim và haystack theo thứ tự như strpos. – Noumenon

0

Nếu bạn cần dữ liệu của bạn trong các cột đây là những gì tôi sử dụng:

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 

Chỉ cần thay thế '' trong hàm với dấu phân cách của bạn (hoặc thậm chí có thể parametrize nó)

Các vấn đề liên quan