最近遇到一个小问题,在这里记录一下。
问题描述
有一条查询语句,大致如下:
1 select * from table where create_date = ‘2020-04-12‘ and status = ‘10‘ with ur
当使用数据库工具AQT进行查询时,可以正确查到数据。但通过远程SSH连接数据库进行查询时,却怎么都查不到。
原因分析
通过对条件进行分析(实际条件要比上例复杂),定位到大概率是日期格式问题。于是分别在AQT和SSH客户端执行以下语句:
1 select create_date from table where status = ‘10‘ with ur
果然,AQT的数据格式是这样的 YYYY-MM-DD ,而在SSH是这样的 MM/DD/YYYY 。 create_date 是DATE类型的数据列。
通过分析后了解到,常用的数据库工具一般在处理和展示日期类型的数据时,会自动进行格式转换,也算是帮用户封装具体细节,减少对数据列的细节的了解。
不过在这地方相当于好心办了坏事。修改查询语句如下:
1 select * from table where create_date = date(‘2020-04-12‘) and status = ‘10‘ with ur
通过在sql语句中先转换成日期格式,避免在不同环境下执行的效果不一样。