日常踩坑系列(一)

作者: 一名程序猿 | 来源:发表于2018-06-21 19:02 被阅读22次
    1.数据库坑

    公司做政府项目,啥子数据库都用。sql server,db2,mysql,oracle。

    进入正题

    使用group by 分组。

    sql server数据库实操

    sql server.png

    这儿的错误提示异常非常明显,就是说select后面除了聚合函数包裹的列以外,其余列必须出现在了gruop by之后方可被select
    正确的实例如下


    sql server correct.png

    db2数据库实操

    db2.png

    An expression starting with "ID" specified in a SELECT clause, HAVING clause, or ORDER BY clause is not specified in the GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER BY clause with a column function and no GROUP BY clause is specified.. SQLCODE=-119, SQLSTATE=42803, DRIVER=3.61.75
    错误日志和sql server一个意思,就是除了聚合函数包裹的列以外,其余列必须出现在了gruop by之后方可被select
    正确实例如下


    db2 correct.png

    mysql数据库实操

    mysql.png

    可以发现mysql明显没有遵守这个原则。

    使用order by

    这个我就不截图了,主要说一哈group by 和order by连用时,order by 后面的字段必须出现在group by后面,mysql 又完美的错过了此规范。

    这些问题都不大,大家严格遵守规范就不会出现问题。这里提一哈也算是个坑吧。

    2.ZonedDateTime 与 LocalDateTime问题

    一个是带时区信息的时间,一个不带时区信息的时间。可能会导致时间错乱问题。

    这里涉及到一个时间协议ISO 8601
    国际标准化组织的国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。

    小时、分和秒都用2位数表示,对UTC时间最后加一个大写字母Z,其他时区用实际时间加时差表示。如UTC时间下午2点30分5秒表示为14:30:05Z或143005Z,当时的北京时间表示为22:30:05+08:00或223005+0800,也可以简化成223005+08。

    相关文章

      网友评论

        本文标题:日常踩坑系列(一)

        本文链接:https://www.haomeiwen.com/subject/tfsqyftx.html