我有一个JSON
列,其中可能包含字符串"attribute":"my_value"
(以及其他JSON
属性),这是我必须搜索的查询:
SELECT 1
FROM TABLE
WHERE JSON_COLUMN REGEXP '"attribute":"?"'
execQuery
函数在参数化的字符串中添加撇号,这是运行的查询:
SELECT 1
FROM TABLE
WHERE JSON_COLUMN REGEXP '"attribute":"'my_value'"'
这不是有效的SQL查询,如何搜索此参数以获取与此值匹配的行?
我在mysql
中为nodejs
(5.6)使用orm package,这是我的用法:
execQuery(MY_QUERY, [param1], (err, data) => {
if (err) {
return reject({
error: 'cannotFetch',
message: err
});
} else {
return resolve(data);
}
})
答案 0 :(得分:2)
如果您有JSON列,为什么不提取值呢?
WHERE JSON_COLUMN->'$.attribute' = 'myvalue'
答案 1 :(得分:2)
您可以使用JSON_EXTRACT在where子句中使用JSON列
WHERE JSON_EXTRACT(JSON_COLUMN, "$.attribute") = 'myvalue'
如果使用mysql 5.6或更低版本,则必须使用REGEXP
WHERE `JSON_COLUMN` REGEXP '"attribute":[^}]*"my_value"[^}]*}'
答案 2 :(得分:0)
我最终使用了以下查询:
<p > < /p >
并注意const MY_QUERY = `SELECT 1 FROM TABLE WHERE JSON_COLUMN REGEXP ?`;
部分中的动态值:
nodejs
这是我为const getAttributeUsageTemplate = value => (`"attribute":"${value}"`);
execQuery(MY_QUERY, [getAttributeUsageTemplate(param1)], (err, data) => {
})
版本找到的唯一解决方案
驱动程序仍然用撇号将参数括起来,但是它们不会妨碍正则表达式