日常踩坑系列(一)

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。

你可能感兴趣的:(日常踩坑系列(一))