繁体   English   中英

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

[英]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部分。

我目前正在使用MIDSEARCH在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM