如何解决如何从SQL Server中的特定列提取此特定数据?
我的一列中包含以下数据:
Change
18 MCO-005329
A ECO-12239
0 ECO-25126
X1 ECO-05963
NA MCO-003778
C ECO-08399
MCO-003759
ECO-00643217
NULL
我想提取如下输出:
MCO-005329
ECO-12239
ECO-25126
ECO-05963
MCO-003778
ECO-08399
MCO-003759
ECO-00643217
我已经实现了如下代码:
select DISTINCT change,case when change like 'MCO%' THEN change when change like 'ECO-%' THEN change
when change like '%MCO-%' then LTRIM(RTRIM(SUBSTRING(change,10,19) ))
when change like '%ECO-%' then LTRIM(RTRIM(SUBSTRING(change,19) ))
else '' end x from table
解决方法
您可以将CHARINDEX()
和RIGHT()
用作
SELECT *,RIGHT(Change,CHARINDEX('-',REVERSE(Change)) + 3)
FROM
(
VALUES
('18 MCO-005329'),('A ECO-12239'),('0 ECO-25126'),('X1 ECO-05963'),('NA MCO-003778'),('C ECO-08399'),('MCO-003759'),('ECO-00643217'),('hhh kkk-k'),(NULL)
) T(Change)
,
您可以使用SPLIT_STRING
,outer apply
和一个简单的where子句从需求中解析出值,而无需依赖于对任何特定的字符串长度或位置值及其动态进行硬编码。
SELECT D2.*
FROM
(
select '18 MCO-005329'
union select 'A ECO-12239'
union select '0 ECO-25126'
union select 'X1 ECO-05963'
union select 'NA MCO-003778'
union select 'C ECO-08399'
union select 'MCO-003759'
union select 'ECO-00643217'
union select NULL
) T(Change)
outer apply
(
select value
from
string_split(Change,' ') d
) d2
where d2.value like '%-%' or d2.value is null
如果您不希望使用null,则可以轻松删除或d2.value is null
https://docs.microsoft.com/en-us/sql/t-sql/queries/from-transact-sql?view=sql-server-ver15 https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。