4 db2-9.7
执行 sql 查询时,我在 db2 中遇到以下错误-
SQL20448N "05/09/2016" 不能使用 TIMESTAMP_FORMAT 函数的格式字符串 "YYYY-MM-DD" 来解释。
这是我的 sql qyery-
SELECT DLR_CD,
FIN ,
YEAR(TO_DATE(CURRENT_DATE ,'YYYY-MM-DD'))-YEAR(TO_DATE(CRTNG_DTE,'YYYY-MM-DD'))
AS AGE
FROM ASPECT.RO_CAR_PARK_EXTRACT WHERE YEAR = PARM_YEAR
Run Code Online (Sandbox Code Playgroud)
这可能是什么原因?
数据库-DB2 v9.7.200.358 平台-家庭基础7
错误信息非常清楚。我想类型CRTNG_DTE
是 text/varchar 并且至少其中一个值不是YYYY-MM-DD
格式(05/09/2016
显然不是!)并且转换TO_DATE(CRTNG_DTE, 'YYYY-MM-DD')
失败。
消息中唯一不清楚的是提到了TIMESTAMP_FORMAT()
功能。DB2 文档的TO_DATE()
这部分功能明确指出:
该
TO_DATE
标量函数是一个同义词的TIMESTAMP_FORMAT
标量函数。
混淆可能源于对TO_DATE()
函数功能的错误假设。
在TO_DATE(CRTNG_DTE, 'YYYY-MM-DD')
试图将字符串具有格式YYYY-MM-DD
为日期。日期内部格式无关紧要,您无法修改它。您无法选择日期在内部保存的格式。
它们的内部格式是不同 DBMS 到 DBMS 的日期表示,也可能因版本而异。开发人员不需要关心这种表示是什么!
另一个问题是第一次转换:
YEAR(TO_DATE(CURRENT_DATE, 'YYYY-MM-DD'))
Run Code Online (Sandbox Code Playgroud)
由于TO_DATE()
期望一个字符串(要转换)和一个格式字符串,但您将日期和格式字符串传递给函数,因此 DB2 首先将日期值 ( CURRENT_DATE
) 转换为字符串(我猜使用安装输出格式中的默认值)MM/DD/YYYY
) 所以它然后尝试计算:
TO_DATE('05/09/2016', 'YYYY-MM-DD')
Run Code Online (Sandbox Code Playgroud)
由于与上述相同的原因,这当然失败了。
因此,要解决问题(或问题):
YEAR(CURRENT_DATE)
,而不是第一个计算。CRTNG_DTE
列的所有值都以'YYYY-MM-DD'
您期望的格式 ( )保存。 归档时间: |
|
查看次数: |
3798 次 |
最近记录: |