首页 > 解决方案 > 如何在 SQL Server 中使用 PATINDEX?

问题描述

在 SQL Server 2012 中,我有一列包含长文本数据。在文本中的某处,有一些格式的文本

{epa_file_num} = {138410-81}

如果存在,我想提取138410-81为列值。在常规的 JS 正则表达式中,我会使用这样的东西{ *epa_file_num *} *= *{ *\d*-?\d* *}来匹配列,然后可能是一个捕获组来获取值。

但是如何在 SQL Server 2012 中获得它?

谢谢

标签: sql-serverregexsql-server-2012patindex

解决方案


不是正则表达式,但这可能会满足您的要求:

DECLARE @Input VARCHAR(MAX)='{some name} = {a value} some text {epa_file_num} = {138410-81} other text'
SET @Input=REPLACE(@Input,' ','')
SET @Input=SUBSTRING(@Input,NULLIF(PATINDEX('%{epa_file_num}={%',@Input),0)+LEN('{epa_file_num}={'),LEN(@Input))
SET @Input=SUBSTRING(@Input,1,NULLIF(CHARINDEX('}',@Input),0)-1)
SELECT @Input

首先,我删除所有空格,然后查找{epa_file_num}=并获取此字符串之后的所有内容,直到下一个}.


推荐阅读