sql - 如何使用 TSQL 将数字和字符串拆分为两列
问题描述
在我的项目中,我有一列包含数字(包括“-”符号)和一个字符串。我想把它分成两列。数字和字符串之间的分隔符不同,可以是“”或“-”。是否可以通过 TSQL 查询来解决此问题?此 TSQL 引擎放置在 Devexpress WinForms 设计器中。
例子:
科尔: |
---|
343234-2321 字符串字符串 |
402-09-12 - 另一个字符串 |
只是串 |
303-404 - 文本字段 |
预期结果
Col1 | Col2 |
---|---|
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
请参阅示例 DB Fiddle
请注意,如果您使用的是 SQL2016 或更早版本,则需要替换trim
为嵌套ltrim & rtrim
推荐阅读
- assembly - 非常卡在 ARM 中的子程序上
- hl7-fhir - 对具有大量患者的 Fhir 服务器执行条件删除操作失败
- julia - 如何在 Julia 中使用未注册的包?
- python - django 2.2.5 URL 路径中的 URL 正则表达式
- java - VSCode、Java、Spring Boot 和 Maven - 未读取环境变量
- javascript - 如何在传奇中使用警报,将其挂起,并且仅在按下按钮时才继续?
- typescript - 如何使用打字稿禁用nativescript中的多个按钮
- ios - Apple Receipt Validation 返回没有 latest_receipt_info 字段的收据
- arduino - 如何使用模拟值制作 HIGH LOW 循环
- sql - 用于匹配并返回所有出现的搜索字符串的 SQL 查询