首页 > 解决方案 > 如何使用 TSQL 将数字和字符串拆分为两列

问题描述

在我的项目中,我有一列包含数字(包括“-”符号)和一个字符串。我想把它分成两列。数字和字符串之间的分隔符不同,可以是“”或“-”。是否可以通过 TSQL 查询来解决此问题?此 TSQL 引擎放置在 Devexpress WinForms 设计器中。

例子:

科尔:
343234-2321 字符串字符串
402-09-12 - 另一个字符串
只是串
303-404 - 文本字段

预期结果

Col1 Col2
343234-2321 字符串字符串
402-09-12 另一个字符串
无效的 只是串
303-404 文本域

先感谢您!

标签: sqltsqldevexpress

解决方案


假设您总是需要在数字结束后将字符串分成两半,如示例数据所示,一个可能的解决方案是使用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

请参阅示例 DB Fiddle

请注意,如果您使用的是 SQL2016 或更早版本,则需要替换trim为嵌套ltrim & rtrim


推荐阅读