在开发环境和UAT环境中,运行同一条sql,开发环境报错,UAT正常。
sql:select * from table_name where to_cahr(trans_date,'yyyy-mm') = '2016-08';
其中,trans_date为varchar型,存储的是日期,即“2016-08-02”.
开发环境中报错信息;
SQL0180N The systax of the string representation of a datetime value is incorrect. SQLSTATE=22007
有些系统的数据格式为 ‘2016/08/02’
你确定 存储的日期是对的吗?
很抱歉现在才回复结帖,这个问题之前一直没明白,现在才搞懂。两个数据库中的字段全部都为字符型,存储的是形如'yyyy-MM-dd'这样的数据,这种格式是可以使用to_char(dateString,format)这个函数的,但是其他日期格式,如'yyyy/MM/dd'、'yyyyMMdd'等,这个函数就不好用了。而本次问题中,UAT环境的数据全部为'yyyy-MM-dd'这种格式;而开发环境中,由于程序代码格式化日期问题,部分数据存储的日期包含'yyyyMMdd'这种格式。所以使用此函数报错。
额,不知道是不是你打错了,正确的sql应该是:
select * from table_name where to_char(trans_date,'yyyy-mm') = '2016-08';
不同是数据库的sql语法是不同的,如:
查询前10条数据:
mysql:select * from table1 limit 10
oracle:SELECT
*
FROM
table1
WHERE
ROWNUM<=10
希望可以帮到你