2009-07-08 11 views
15

Bir alanın gerçekten iki ayrı alanda saklanması gerekenleri içerdiği can sıkıcı bir veritabanıyla uğraşıyorum. Böylece sütun "~ @ ~" ikinci dizgisi "," ~ @ ~ "sınırlayıcı olduğu ilk dizgede saklanır. (Yine, ben sadece bunu düzeltmek için çalışıyorum, bu tasarım vermedi.)SQL Server: herhangi bir eşdeğer strpos()?

Ben, bu şuna benzer verecek bir sorgu iki sütuna bu hareket etmek istiyorum:

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

Ama Strpos için herhangi bir eşdeğer olduğunu bulamıyorum.

cevap

34

Kullanıcı charIndex:

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

Link

+0

İğne ve samanlıklarını aynı sırayla bırakırsanız, argümanların sırasının burada değiştirildiğini ve çok sayıda "String veya binary data da kesileceği" hatalarının olduğunu unutmayın. strpos. – Noumenon

0

burada sütunlarda veri gerekiyorsa ben ne kullanın: En sınırlayıcısıyla işlevinde ''

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 

Hemen değiştirin (ya da belki hatta bunu parametrize)