我有以下查询:
Select
Notes
From
Table
输出的样本可能是:
78652972MWGN00183HCE736430
77305311FTBCHCE735946Wheat
Training
但是我想要什么,因为输出是字符串中的ID,该ID总是以HCE
开头,并且总是8个字符,如果没有ID,它将返回{{1} }
所以我期望的是:
No Machine ID
我该如何实现?
我已经看过使用HCE736430
HCE735946
No Machine Id
,但是无法搜索HCE部分。
我目前正在使用SUBSTRING
和MID
在Excel中执行此操作:
SEARCH
答案 0 :(得分:4)
您可以为此使用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
答案 1 :(得分:2)
您可以将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)
答案 2 :(得分:2)
此查询符合您的要求:
SELECT CASE WHEN CHARINDEX('HCE', Notes) = 0 THEN 'No MachineID' ELSE
SUBSTRING(Gender, CHARINDEX('HCE', Notes), 9) END
FROM Table