首页 新闻 搜索 专区 学院

两个基本相同的DB2数据库,同一条sql一个报错,一个正常运行

0
[已解决问题] 解决于 2016-12-17 22:34

在开发环境和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

GeorgeFranklin的主页 GeorgeFranklin | 初学一级 | 园豆:199
提问于:2016-09-29 10:15
< >
分享
最佳答案
1

 有些系统的数据格式为  ‘2016/08/02’ 

奖励园豆:5
he彼岸 | 菜鸟二级 |园豆:218 | 2016-09-29 15:00
其他回答(3)
1

你确定 存储的日期是对的吗?

悦光阴 | 园豆:2239 (老鸟四级) | 2016-09-29 11:27

很抱歉现在才回复结帖,这个问题之前一直没明白,现在才搞懂。两个数据库中的字段全部都为字符型,存储的是形如'yyyy-MM-dd'这样的数据,这种格式是可以使用to_char(dateString,format)这个函数的,但是其他日期格式,如'yyyy/MM/dd'、'yyyyMMdd'等,这个函数就不好用了。而本次问题中,UAT环境的数据全部为'yyyy-MM-dd'这种格式;而开发环境中,由于程序代码格式化日期问题,部分数据存储的日期包含'yyyyMMdd'这种格式。所以使用此函数报错。

支持(0) 反对(0) GeorgeFranklin | 园豆:199 (初学一级) | 2016-12-17 22:43
0

额,不知道是不是你打错了,正确的sql应该是:

select * from table_name where to_char(trans_date,'yyyy-mm') = '2016-08';

合抱之木,生于毫末 | 园豆:229 (菜鸟二级) | 2016-09-29 14:53
0

不同是数据库的sql语法是不同的,如:

查询前10条数据:

mysql:select * from table1 limit 10

oracle:SELECT FROM table1  WHERE ROWNUM<=10

希望可以帮到你

凯伦 | 园豆:186 (初学一级) | 2016-10-17 10:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册