如何在mysql中比较json属性忽略类型

时间:2017-06-06 08:38:23

标签: mysql json

在mysql 5.7中,我有一个表:

CREATE TABLE `item` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`attributes` JSON NULL DEFAULT NULL,
);

然后我INSERT INTOVALUES (1, 'trademark', 250000.00, '{"sn": "5108174", "type": 1, "group": "2501 2502 2503 2506 2507 2508 2509 2510 2511 2512", "regDate": 1210694400}');

我可以通过以下方式选择行:

select * from item where price = '250000.00'

或者

select * from item where price = 250000.00

因为mysql默认忽略普通字段类型。

但是当我按照json属性过滤时,它会有所不同:

#Return empty select * from item where json_extract(attributes, '$.type') = '1';

#Return one row select * from item where json_extract(attributes, '$.type') = 1;

由于attribute.type是数字,我可以将其转换为字符串以忽略类型:

select * from item where concat(json_extract(attributes, '$.type'),'') = '1';

select * from item where cast(json_extract(attributes, '$.type') as char) = '1';

不幸的是,当attribute.type是字符串

时,魔法就丢失了

INSERT INTOVALUES (1, 'trademark', 250000.00, '{"sn": "5108174", "type": "1", "group": "2501 2502 2503 2506 2507 2508 2509 2510 2511 2512", "regDate": 1210694400}')

因此,当我从url param收到attribute.type时,很难得到它的真实类型来选择数据。

有没有办法比较json属性忽略类型,如普通字段?

0 个答案:

没有答案