用于排除一个或多个字符的 MSSQL 通配符
MSSQL wildcard for excluding one or more characters
我在 SQL table(MSSQL 服务器)的单个列中存储了一个 json 数组。现在我想使用 LIKE "pattern" 和通配符过滤一些行。存储的对象是这样的:
[{"id":"W678","value":"282779"},
{"id":"O891","value":"25896"},
{"id":"E859","value":"12711"},
{"id":"M914","value":"31513"}]
例如,我想过滤行,其中他们的 JSON 数组中有一个元素 "id"="W678" 并且值包含“27”
在使用正则表达式的情况下,以下正则表达式对我有用:
/.+{"id":"W678","value":"[^{}]*27[^{}]*"}.+/
但我不知道如何将上面的正则表达式翻译成 SQL 通配符表达式。
我已经尝试过类似的方法,但它不起作用。
LIKE '%{"id":"W678","value":"[^{}]%' + @Value + '[^{}]*%"}%'
谢谢
一种可能的方法是使用 OPENJSON() 和 WITH
子句中的显式模式将 JSON 数组和 return 其内容解析为 table .然后,使用基于集合的方法,您可以过滤内容并找到匹配的行。
Table:
CREATE TABLE Data (JsonData varchar(1000))
INSERT INTO Data (JsonData)
VALUES ('[
{"id":"W678","value":"282779"},
{"id":"O891","value":"25896"},
{"id":"E859","value":"12711"},
{"id":"M914","value":"31513"}
]')
声明:
SELECT d.*
FROM Data d
CROSS APPLY (
SELECT *
FROM OPENJSON (d.JsonData) WITH (
id varchar(4) '$.id',
value varchar(6) '$.value'
)
WHERE [id] = 'W678' AND [value] LIKE '%27%'
) a
请注意,显式模式定义取决于 JSON 数组的结构。
我在 SQL table(MSSQL 服务器)的单个列中存储了一个 json 数组。现在我想使用 LIKE "pattern" 和通配符过滤一些行。存储的对象是这样的:
[{"id":"W678","value":"282779"},
{"id":"O891","value":"25896"},
{"id":"E859","value":"12711"},
{"id":"M914","value":"31513"}]
例如,我想过滤行,其中他们的 JSON 数组中有一个元素 "id"="W678" 并且值包含“27”
在使用正则表达式的情况下,以下正则表达式对我有用:
/.+{"id":"W678","value":"[^{}]*27[^{}]*"}.+/
但我不知道如何将上面的正则表达式翻译成 SQL 通配符表达式。 我已经尝试过类似的方法,但它不起作用。
LIKE '%{"id":"W678","value":"[^{}]%' + @Value + '[^{}]*%"}%'
谢谢
一种可能的方法是使用 OPENJSON() 和 WITH
子句中的显式模式将 JSON 数组和 return 其内容解析为 table .然后,使用基于集合的方法,您可以过滤内容并找到匹配的行。
Table:
CREATE TABLE Data (JsonData varchar(1000))
INSERT INTO Data (JsonData)
VALUES ('[
{"id":"W678","value":"282779"},
{"id":"O891","value":"25896"},
{"id":"E859","value":"12711"},
{"id":"M914","value":"31513"}
]')
声明:
SELECT d.*
FROM Data d
CROSS APPLY (
SELECT *
FROM OPENJSON (d.JsonData) WITH (
id varchar(4) '$.id',
value varchar(6) '$.value'
)
WHERE [id] = 'W678' AND [value] LIKE '%27%'
) a
请注意,显式模式定义取决于 JSON 数组的结构。