2011-06-07 27 views
2

是否存在內置函數(而不是UDF),或者有人可以提供示例代碼以在遇到字符時將字符串分割爲兩列? 樣品:使用XML驗證Excel並移至SQL Server目標

1234:ABCD

分裂上面的字符串爲1234和ABCD爲兩列

+1

是否總是冒號?它是否被丟棄以至於它都不在列中?冒號後總會出現任何字母?如果你通過編輯你的問題來展示所有可能的組合的例子,這可能會有所幫助。 – DOK 2011-06-07 16:41:44

回答

0

標題/標籤不匹配?

對於Excel,如果A1包含值:

使B1=LEFT(A1,IF(ISERROR(FIND(":",A1)),LEN(A1),FIND(":",A1)-1))
使C1=RIGHT(A1,IF(ISERROR(FIND(":",A1)),0,LEN(A1)-FIND(":",A1)))

或爲T-SQL +一個字符串變量;

DECLARE @F VARCHAR(64) = '1234:ABCD' 

IF @F LIKE '%:%' 
    SELECT SUBSTRING(@F, 1, CHARINDEX(':', @F, 1) - 1) AS COL1, 
      SUBSTRING(@F, CHARINDEX(':', @F, 1) + 1, LEN(@F)) AS COL2 
ELSE 
    SELECT @F AS COL1, NULL AS COL2 

for select;

;WITH faketable (fld) AS (
    SELECT 'aaa:123' as fld 
    UNION SELECT 'ddddd' 
) 
SELECT 
    CASE WHEN fld LIKE '%:%' THEN SUBSTRING(fld, 1, CHARINDEX(':', fld, 1) - 1) ELSE fld END AS COL1 , 
    CASE WHEN fld LIKE '%:%' THEN SUBSTRING(fld, CHARINDEX(':', fld, 1) + 1, LEN(fld)) ELSE NULL END AS COL2 
FROM faketable 

>COL1 COL2 
>aaa 123 
>ddddd NULL 
+0

我正在尋找一個簡單的tsql語句..你的建議幫助..感謝很多。 – Lrn 2011-06-07 18:22:40

1

有此一展身手。它不漂亮,但它產生的兩列(假設:總是分頻器):

declare @test varchar(20) 
set @test = '1234:abcd' 

select 
    leftcol = left(@test,charindex(':',@test)-1), 
    rightcol = right(@test,len(@test) - charindex(':',@test)) 

。換句話說,它不是在功能上構建的,但它是內聯SQL代碼。