[英]Select only part of a string SQL Server
我有以下查询:
Select
Notes
From
Table
输出的样本可能是:
78652972MWGN00183HCE736430
77305311FTBCHCE735946Wheat
Training
但是,我要输出的是字符串中的ID,该ID始终以HCE
开头,并且始终为8个字符,如果没有ID,则它将返回No Machine ID
因此,我期望的输出是:
HCE736430
HCE735946
No Machine Id
我该如何实现?
我已经看过使用SUBSTRING
,但是无法搜索HCE部分。
我目前正在使用MID
和SEARCH
在Excel中执行此操作:
=MID(A2,SEARCH("HCE",A2),9)
您可以为此使用PATINDEX。 这是一个例子。
declare @Something table (SomeVal varchar(50))
insert @Something values
('78652972MWGN00183HCE736430')
, ('77305311FTBCHCE735946Wheat')
, ('Training')
,('asdfHCExx')
select case when patindex('%HCE[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]%', SomeVal) > 0
then substring(SomeVal, patindex('%HCE[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]%', SomeVal), 9)
else 'No Machine Id'
end
from @Something
您可以将patindex()
与substring()
:
SELECT Notes, SUBSTRING(Notes, PATINDEX('%HCE%', Notes +'HCE'), 9)
From Table;
第一个版本会显示blank
,如果Machine Id
,如果你想显示笔记中No Machine Id
代替,那么你可以添加case
表达:
(CASE WHEN PATINDEX('%HCE%', Notes) > 0
THEN SUBSTRING(Notes, PATINDEX('%HCE%', Notes), 9)
ELSE
'No Machine Id'
END)
此查询可满足您的要求:
SELECT CASE WHEN CHARINDEX('HCE', Notes) = 0 THEN 'No MachineID' ELSE
SUBSTRING(Gender, CHARINDEX('HCE', Notes), 9) END
FROM Table
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.