是否可以在SQL Server varchar(max)列中执行regex模式匹配并返回匹配结果



我有一个日志表,其中有一些记录具有以下类型的模式:

.... "RefundId":"re_1ABasdf234234343434", "..."....  

我想提取并返回select语句中一列中RefundId的值,这可能吗?

如果每行只有一个Refund_ID,那么您可以使用以下内容:

--Create table
create table T1 (
T1_id int identity(1,1) primary key clustered,
Log_Data varchar(max) null
)
--Insert test data
insert T1(Log_Data)
values('.... "RefundId":"re_1ABasdf234234343434", "..."....'),
(' "RefundId":"JHHJJHJHJHJJHJH", "..."....'),
(''),
(null)
--Get some results
select  *, left(substring(Log_Data, patindex('%"RefundId":"%', Log_Data)+12, 20000000), patindex('%"%', substring(Log_Data, patindex('%"RefundId":"%', Log_Data)+12, 20000000)) + case when patindex('%"%', substring(Log_Data, patindex('%"RefundId":"%', Log_Data)+12, 20000000)) > 0 then -1 else 0 end ) Refund_ID
from    T1

如果每个值都有多个Refund_ID,那么您必须找到不同的方法。

您可以使用关键字LIKE

SELECT RefundId
FROM MyTable
WHERE RefundId LIKE 'some pattern'

最新更新