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中的日期大于或小于固定日期的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server SELECT 到 JSON 函数

sql存储过程输出

go语言select语句中的求值问题

go语言select语句中的求值问题

go语言select语句中的求值问题

go语言select语句中的求值问题