如何使用 SQL 将数字和字符串拆分为两列
How to split numbers and string into two columns using TSQL
在我的项目中,我有一列包含数字(包括“-”符号)和一个字符串。我想把它分成两列。数字和字符串之间的分隔符不同,可以是“”或“-”。是否可以通过 TSQL 查询来解决此问题?
此 TSQL 引擎位于 Devexpress WinForms 设计器中。
示例:
栏目:
343234-2321 字符串字符串
402-09-12 - 另一个字符串
只是字符串
303-404 - 文本字段
预期结果
第 1 栏
第 2 栏
343234-2321
字符串字符串
402-09-12
另一个字符串
空
只是字符串
303-404
文本字段
提前致谢!
假设您总是需要在数字结束后将字符串分成两半,如示例数据所示,一个可能的解决方案是使用 patindex
:
with s as (
select col, PatIndex('%[A-z]%',col) d
from t
)
select col,
NullIf(Trim(case when Substring(Left(col,d-1),d-2,1)='-' then
Left(col,d-3)
else Left(col,d-1) end),'') Col1,
NullIf(Trim(NullIf(Substring(col,d,Len(col)),'')),'') Col2
from s
请注意,如果您使用的是 SQL2016 或更早版本,则需要将 trim
替换为嵌套的 ltrim & rtrim
在我的项目中,我有一列包含数字(包括“-”符号)和一个字符串。我想把它分成两列。数字和字符串之间的分隔符不同,可以是“”或“-”。是否可以通过 TSQL 查询来解决此问题? 此 TSQL 引擎位于 Devexpress WinForms 设计器中。
示例:
栏目: |
---|
343234-2321 字符串字符串 |
402-09-12 - 另一个字符串 |
只是字符串 |
303-404 - 文本字段 |
预期结果
第 1 栏 | 第 2 栏 |
---|---|
343234-2321 | 字符串字符串 |
402-09-12 | 另一个字符串 |
空 | 只是字符串 |
303-404 | 文本字段 |
提前致谢!
假设您总是需要在数字结束后将字符串分成两半,如示例数据所示,一个可能的解决方案是使用 patindex
:
with s as (
select col, PatIndex('%[A-z]%',col) d
from t
)
select col,
NullIf(Trim(case when Substring(Left(col,d-1),d-2,1)='-' then
Left(col,d-3)
else Left(col,d-1) end),'') Col1,
NullIf(Trim(NullIf(Substring(col,d,Len(col)),'')),'') Col2
from s
请注意,如果您使用的是 SQL2016 或更早版本,则需要将 trim
替换为嵌套的 ltrim & rtrim