在我的项目中,我有一列包含数字(包括"-"符号(和字符串。我想把它分成两列。数字和字符串之间的分隔符不同,它可以是"0"或"-&";。有可能通过TSQL查询来解决这个问题吗?这个TSQL引擎被放置在Devexpress WinForms设计器中。
示例:
列: |
---|
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