我们有这些列可以说
+----+------------------------------------+---------+
| ID | ColumnA | ColumnB |
+----+------------------------------------+---------+
| 1 | ASDKHASDH SDAJH ASKDHAS HDASDHJ 12 | abcd |
| 2 | asdjahdasd | efghijk |
| 3 | dgfwfbiwbf | null |
| 4 | sdf | null |
+----+------------------------------------+---------+
我想要一个查询,如果columnA
的LEN大于30,则在最后一个空格后将columnA
的其余部分移至columnB
。
所以..我们最终会以
结束+----+---------------------------------+---------+
| ID | ColumnA | ColumnB |
+----+---------------------------------+---------+
| 1 | ASDKHASDH SDAJH ASKDHAS HDASDHJ | 12 abcd |
| 2 | asdjahdasd | efghijk |
| 3 | dgfwfbiwbf | null |
| 4 | sdf | null |
+----+---------------------------------+---------+
对不起,伙计们,我可能还不够清楚。也许这可能会有所帮助:
更新TableA set ColumnA = ColumnA - (最后一个空格后的最后一个子字符串的值), ColumnB =(最后一个空格后ColumnA的最后一个子字符串的值)+','+ ColumnB 其中LEN(ColumnA)> 30
注意IDB上的12如何在ColumnB上添加值和空格+ columnB。
答案 0 :(得分:1)
尝试以下查询,这将为您提供ColumnA
中的前30个字母,尾随将附加到ColumnB
SELECT ID
,LEFT(ColumnA,30) AS ColumnA
,RIGHT(ColumnA,(CASE WHEN LEN(ColumnA) > 30 THEN LEN(ColumnA)-30 ELSE 0 END)) +
ColumnB AS ColumnB
FROM TABLE1
如果您的魔杖ColumnA
在最后一个空格后大于30时被拆分,请尝试以下查询,
WITH CTE
AS
(
SELECT *
,(CASE WHEN LEN(ColumnA) > 30
THEN CHARINDEX(' ',SUBSTRING(ColumnA,31,LEN(ColumnA)))
ELSE 0 END) AS FLAG
FROM @TABLE
)
SELECT ID
,(CASE WHEN FLAG > 0 THEN LEFT(ColumnA,30+FLAG)
ELSE ColumnA END) AS ColumnA
,(CASE WHEN FLAG > 0 THEN SUBSTRING(ColumnA,30+FLAG,LEN(ColumnA))
ELSE '' END )+ ' '+ColumnB AS ColumnB
FROM CTE
答案 1 :(得分:0)
SELECT ID,SUBSTRING(COlumnA,1,30) AS ColumnA,
CASE WHEN LEN(COlumnA)>30
THEN ColumnB + SUBSTRING(COlumnA,31,LEN(COlumnA)) END AS ColumnB
FROM TABLE1
答案 2 :(得分:0)
您可以使用SUBSTRING
和CHARINDEX
SELECT
ID,
CASE WHEN CHARINDEX(' ', ColumnA, 30) = 0 THEN ColumnA
ELSE SUBSTRING(ColumnA, 0, CHARINDEX(' ', ColumnA, 30)) END ColumnA,
CASE WHEN CHARINDEX(' ', ColumnA, 30) = 0 THEN ColumnB
ELSE SUBSTRING(ColumnA, CHARINDEX(' ', ColumnA, 30), LEN(ColumnA)) + ColumnB END AS ColumnB
FROM
TBL
答案 3 :(得分:0)
使用CASE
表达式和字符串函数LEFT
,RIGHT
和SUBSTRING
的组合。
<强>查询强>
SELECT id,
CASE WHEN Len(ColumnA) > 30 THEN LEFT(ColumnA, 30)
+ Substring(ColumnA, 31, Charindex(' ',
RIGHT(ColumnA, Len(columna) - 30)) - 1)
ELSE ColumnA END AS ColumnA,
CASE WHEN Len(ColumnA) > 30 THEN RIGHT(ColumnA, Len(ColumnA) - 30
- Charindex(' ', RIGHT(ColumnA, Len(AolumnA) - 31)) - 1)
+ ' ' + ColumnB
ELSE ColumnB
END AS ColumnB
FROM [your_table_name];