mysql5.7,mybatis对数据库中json字段中list数组的截取并判断出现的坑

文章讲述了在处理JSON数据时,如何正确使用SQL函数如SUBSTRING或JSON_EXTRACT截取endTime字段,避免因双引号问题导致的错误,提供了两种正解方法:使用left函数配合JSON路径表达式,以及在提取过程中注意引号的使用规则。
摘要由CSDN通过智能技术生成

需求:需要将下边json字段中的endTime 截取成2023-12-27的形式,然后并对参数进行判断

{"duration":20,"deviceType":"减压赋能舱","orderCode":"2023122717092684615","expectedEndTime":"2023-12-27 17:29:27","beginTime":"2023-12-27 17:09:27","endTime":"2023-12-27 17:17:15","list":[{"relax_date":"2023-12-27 17:13:04","heartRate":51,"relaxation":92,"tired":27,"compression":94},{"relax_date":"2023-12-27 17:16:42","heartRate":97,"relaxation":91,"tired":42,"compression":68}],"account":"SYH00294"}

分享一下SUBSTRING截取的坑

一开始用怎么截取都是会报错的,然后各种搜索,看是哪里的问题始终没解决,后来才知道

上边这种截取方式 会把  " 双引号截取出来,然后就截取10位,一直报错,后来截取11位 参数加了个双引号,就满足条件了,不过 这不是最优解。正解如下:

正解1:

SELECT
    *
FROM
    tenant_sleep_pod_data tspd
WHERE
        tspd.is_deleted = 0 AND
        tspd.tenant_id = 'f210b877525c2ca4e8da9a5f4c2056d0' and right(left(JSON_EXTRACT(tspd.sleep_pod_json_value, '$.endTime'),11),10)
    = '2023-12-21';

正解2:

SELECT
    *
FROM
    tenant_sleep_pod_data tspd
WHERE
        tspd.is_deleted = 0 AND
        tspd.tenant_id = 'f210b877525c2ca4e8da9a5f4c2056d0' and left(tspd.sleep_pod_json_value->> '$.endTime',10)
    = '2023-12-21';

基本是 left函数的语法问题,-> 带引号,->> 不带引号

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值