adb中我用str_to_date, 报错[HY000][1815] [40040, 2023041817025817201617615103453396006] Query execution error: : Invalid format: "2018-12-7" is too short str_to_date(tdate,'%Y-%m-%d %H:%i:%s') 怎么办?不是说格式有错误, 就置为null吗?
查询一直不报错,
插入 常量可以插入成功,变量不可以
replace INTO dwd.mdc_psn_bsc_infmt (
id_crd_no,
bth_dt
)
WITH t5 as (
SELECT '13022119930229483X' as id_crd_no
,concat_ws('-',SUBSTR('13022119930229483X',7,4),SUBSTR('13022119930229483X',11,2),SUBSTR('13022119930229483X',13,2)) as date_info2
)
SELECT a.id_crd_no AS id_crd_no
,case when STR_TO_DATE('1993-02-29', '%Y-%m-%d') is null then null else STR_TO_DATE('1993-02-29', '%Y-%m-%d') end AS bth_dt --常量可以成功
-- ,case when STR_TO_DATE(a.date_info2, '%Y-%m-%d') is null then null else STR_TO_DATE(a.date_info2, '%Y-%m-%d') end AS bth_dt --变量成功不了
FROM t5 a
使用str_to_date(purchaseDate, '%Y-%m-%d %H:%i:%s')函数转换日期出现"2018-12-7" is too short的报错,这是因为待转换的日期字符串格式与指定的格式参数不匹配所致。应该是日期字符串中月份和日份的前导零缺失,无法与格式参数"%Y-%m-%d %H:%i:%s"中定义的日期格式相对应。正确的日期字符串应该是"2018-12-07",其中月份和日份都应该有前导零,此回答整理自钉群“云数据仓库ADB-开发者群”
函数str_to_date的格式参数中,%m表示月份,如果日期中的月份只有1位数,需要在前面添加0来补足两位数。所以,出现"Invalid format: '2018-12-7'"的错误是因为日期中的月份只有1位数。
为了解决该问题,您可以在日期的月份前面添加0来补足两位数,例如'2018-12-07'。或者,您可以使用MySQL的DATE_FORMAT函数将日期格式化为'%Y-%m-%d',然后再使用str_to_date函数进行转换,例如:
str_to_date(DATE_FORMAT(tdate, '%Y-%m-%d'), '%Y-%m-%d')
如果格式错误,确实可以将结果置为NULL,但这需要在SQL语句中使用IF函数或CASE语句显式地处理,例如:
SELECT IF(str_to_date('2018-12-7', '%Y-%m-%d') IS NULL, NULL, str_to_date('2018-12-7', '%Y-%m-%d'))
或者:
SELECT CASE WHEN str_to_date('2018-12-7', '%Y-%m-%d') IS NULL THEN NULL ELSE str_to_date('2018-12-7', '%Y-%m-%d') END
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。