SQL - SELECT存储在JSON varchar中的日期大于或小于固定日期
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - SELECT存储在JSON varchar中的日期大于或小于固定日期相关的知识,希望对你有一定的参考价值。
我有一个VARCHAR列,其中用户存储来自输入,选择,复选框和输入类型日期的自定义数据。
["i":24,"v":[0,1,4],"i":26,"v":[2,3,6,10],"i":41,"v":"2019-03-18","i":27,"v":[26],"i":6,"v":"Very happy to be here.","i":13,"v":4,"i":22,"v":9,"i":3,"v":"Numerous","i":4,"v":3,"i":29,"v":[2,3],"i":30,"v":[3,4]]
我知道ID 41是约会。如果ID 41存在且数据大于固定日期,我想选择此用户。
我的想法是使用REGEX测试ID 41是否存在:qazxsw poi然后捕获日期并测试它(TO_DATE?)。我该怎么做第二部分?
编辑 - 我找到了一个用REGEXP_SUBSTR捕获日期的解决方案:
REGEXP \'(\"i":41,)
=> dt:2019-03-18
我仍然无法测试价值。
出于性能原因,您应该在插入时在单独的列中提取数据。你想要的方式非常慢。
但是,如果你必须这样做,请检查:SELECT user_id, REGEXP_SUBSTR(my_json_col, \'(?<=\"i":41,"v":")(.*?)(?="\)\') AS dt FROM ...
它向您展示了如何直接处理数据,而不是正则表达式。 AFAIK适用于mysql / Postgres,大多数RDBMS都具有JSON功能,但我不认为它是非常标准化的,所以请查看相应的dox。
我认为How can write queries in MySQL that can parse JSON data in a column?就是你所追求的,请查看JSON_EXTRACT(column,'$[41].v')
以获得更多洞察力。
使用REGEXP_SUBSTR和HAVING的解决方案:
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
它运作良好。
以上是关于SQL - SELECT存储在JSON varchar中的日期大于或小于固定日期的主要内容,如果未能解决你的问题,请参考以下文章