2015-12-15 203 views
0

我有一個表TBLSQL:拆分列值分爲兩列

我怎麼能由10分裂列的值(字符數)

FROM:

Column1    
Butuan City Philippines 
Zamboanga City Philippines 
Manila City Philippines 

TO:

Column1   Column2 
Butuan Cit  y Philippines 
Zamboanga   City Philippines 
Manila Cit  y Philippines 
+1

lookup substring() –

+2

你想在列2中的y? –

回答

3

您可以使用SUBSTRING()功能:

SELECT SUBSTRING(Column1, 1, 10) AS Column1, 
    SUBSTRING(Column1, 11, LEN(Column1) - 10) AS Column2 
FROM yourtable 

請注意,我們不必擔心在子字符串中使用的索引大於Column1 q.v.的長度。 documentation其中規定:

如果start [第二個參數]大於值表達式中的字符數,則返回零長度表達式。

如果起點和長度的總和比在表達的字符數時,則返回開始處開始整個值表達式。

+0

如果給出一個靜態長度,如果列值長度增加,它不會發生錯誤?如果列值是'Llanfairpwllgwyngyll' –

+2

您的問題對我沒有意義,但我相信我的答案會起作用,而不需要訴諸'LEFT()'或除SUBSTRING()之外的任何輔助函數。 –

0

使用LEFTSUBSTRING字符串函數。試試這個

DECLARE @str VARCHAR(100) = 'Zamboanga City Philippines' 

SELECT LEFT ((@str), 10), 
     Substring ((@str), 10 + 1, Len(@str)) 
0

可以使用LEFTLENSUBSTRING

SELECT LEFT(Column1,10) AS 'Column1' 

SELECT SUBSTRING(Column1, LEN(LEFT(Column1,10)) + 1, LEN(Column1)) AS 'Column2' 

合併這兩個查詢:

SELECT LEFT(Column1,10) AS 'Column1', 
     SUBSTRING(Column1, LEN(LEFT(Column1,10)) + 1, LEN(Column1)) AS 'Column2' 
0

您可以使用,打造SUBSTRING()功能SQL來實現您的預​​期結果。

例如,

IF (LEN(Column1) > 10) 
BEGIN 
    SELECT SUBSTRING(Column1, 1, 10) AS Column1,SUBSTRING(Column1, 11, LEN(Column1) - 10) AS Column2 
    FROM <TABLE> 
END