仅选择字符串SQL Server的一部分

时间:2018-12-06 15:35:14

标签: sql sql-server

我有以下查询:

Select
    Notes
From
    Table

输出的样本可能是:

78652972MWGN00183HCE736430
77305311FTBCHCE735946Wheat
Training

但是我想要什么,因为输出是字符串中的ID,该ID总是以HCE开头,并且总是8个字符,如果没有ID,它将返回{{1} }

所以我期望的是:

No Machine ID

我该如何实现?

我已经看过使用HCE736430 HCE735946 No Machine Id ,但是无法搜索HCE部分。

我目前正在使用SUBSTRINGMID在Excel中执行此操作:

SEARCH

3 个答案:

答案 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