为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
SQL验证语句如下:
SELECT CASE
WHEN to_char(TO_DATE(‘2020-01-01’, ‘yyyy-mm-dd’), ‘yyyy-mm-dd’) =
TO_DATE(‘2020-01-01’, ‘yyyy-mm-dd’) THEN
1
ELSE
2
END aa
FROM dual
该语句在Oracle库中执行会报"文字与格式字符串不匹配",因为sql里动用了一个to_char字符类型转换和to_date日期类型转换的比较.
而在达梦(DM)的库中执行是成功的,并且该语句返回结果为1,说明在达梦(DM)中是认同这个to_char和to_date之前的比较的,但是是如何实现的不清楚,需要提供下相关的转换逻辑.
如果达梦(DM)后面需要对to_char和to_date函数之间进行比较的逻辑进行修改的话,希望回复一下修改的方向(是否和Oracle一样改为不支持)
除此之外,还有另一个问题也需要达梦(DM)公司给予下解答
问题:
TO_DATE(‘2020-01-01 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’) 和 TO_DATE(‘2020-01-01’, ‘yyyy-mm-dd’)为什么是相等的
SQL验证语句:
SELECT CASE
WHEN TO_DATE(‘2020-01-01 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’) =
TO_DATE(‘2020-01-01’, ‘yyyy-mm-dd’) THEN
1
ELSE
2
END aa
FROM dual
DM 缺省的日期语法格式 FMT 为:‘YYYY-MM-DD HH:MI:SS.FF6’。在dm中日期格式和字符串是允许转换的,
问题一的sql语句在进行比较时会进行类型转换后再比较,这样比较的时候两个值就是相等的,故返回结果是1;
DATE 类型包括年、月、日信息,进行比较时是比较年月日信息,语句二进行比较是等价的,故返回1