玩转DB2之SQL篇:从json格式字段中提取long型日期

因数据统计的需求,笔者需要编写一条sql,用于在tbl_user_info表中某个json数据格式字段中提取姓名、时间等信息,该字段名为data_json,json数据格式如下:

  • id-自增编号
  • name-字符串
  • createdate-long型时间戳

数据示例:{“id”:12859701,”name”:”小编”,”createdate”:1320140099776}

为解决这个问题,用到了以下DB2函数

  • timestamp(‘1970-01-01 08:00:00’) 字符串转换为日期
  • substr(data_json, start, offset) 查找子字符串
  • locate(‘name’, data_json) 查找目标字符串位置
  • length(‘name’) 计算字符串长度
  • cast(‘124’ as bigint) 类型转换

主要思路

首先得从long型时间戳的计算方法说起,是从“1970-01-01 08:00:00”开始标记为0,时间戳的值即为当前时间与时间原点相差的毫秒数,因此我们便可以通过DB2时间加减,轻松将long时间戳转换为日期格式。

SQL代码

select TIMESTAMP('1970-01-01 08:00:00') + ( cast( SUBSTR( m.data_json, ( LOCATE('createdate',m.data_json) + length('createdate":') ), ( LOCATE(',', m.data_json, LOCATE('createdate',m.data_json) ) - LOCATE('createdate',m.data_json) - length('"createdate":') ) ) as bigint ) / 100 ) second as 创建时间 from tbl_user_info m where m.user_id='xxx'

问题总结

  1. 表结构设计虽然很蛋疼,但是需求摆在那里,不得不做,以后设计表多着想着想吧。
  2. DB2和其他数据库的函数还是比较丰富的,能帮助我们完成很多需求。
  3. 日期类型、时间戳、格式字符串等之间的概念算法要了解一下。
    原文作者:liuyang111
    原文地址: https://blog.csdn.net/liuyang111/article/details/51912257
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞