2015-12-15 158 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