执行SQL查询时提示Invalid DATE Literal语法错误,求解决方案
解决SQL中"Invalid DATE Literal"语法错误的方法
错误根源
问题出在关联条件的日期处理部分:DATE 'X'是无效的日期字面量,数据库无法将字符'X'解析为合法的日期值,因此抛出语法错误。
解决方法
方法1:使用合法的日期占位符
将DATE 'X'替换为数据库支持的合法日期值,比如通用的极小日期DATE '0001-01-01'(不同数据库的最小日期可能略有差异,可根据实际使用的数据库调整,Oracle、Snowflake、PostgreSQL均支持该格式)。
修改后的关联条件片段:
COALESCE(CAST(main.EFFECTIVE_START_DT AS DATE), DATE '0001-01-01') = COALESCE(CAST(temp.EFFECTIVE_START_DT AS DATE), DATE '0001-01-01')
方法2:转字符串后用'X'占位再转回日期
先将日期字段转为字符串,用'X'作为空值占位符,之后再统一转回日期类型(前提是原字段的日期值本身可正常转换为DATE类型)。
修改后的关联条件片段:
CAST(COALESCE(CAST(main.EFFECTIVE_START_DT AS VARCHAR), 'X') AS DATE) = CAST(COALESCE(CAST(temp.EFFECTIVE_START_DT AS VARCHAR), 'X') AS DATE)
完整修改后的SQL示例(方法1)
SELECT 1 FROM UDMTOOL_STG.GLOBAL_APPLE_BRAND_QUERIES main INNER JOIN UDMTOOL_STG.GLOBAL_APPLE_BRAND_QUERIES_TEMP temp ON ( COALESCE(main.COUNTRY_CD,'X')=COALESCE(temp.COUNTRY_CD,'X') AND COALESCE(main.SEARCHED_KEYWORD_VAL,'X')=COALESCE(temp.SEARCHED_KEYWORD_VAL,'X') AND COALESCE(main.SEARCHED_KEYWORD_VAL_ENG,'X')=COALESCE(temp.SEARCHED_KEYWORD_VAL_ENG,'X') AND COALESCE(CAST(main.EFFECTIVE_START_DT AS DATE), DATE '0001-01-01')=COALESCE(CAST(temp.EFFECTIVE_START_DT AS DATE), DATE '0001-01-01') AND COALESCE(main.BRAND_NAME,'X')=COALESCE(temp.BRAND_NAME,'X') AND main.OP_CODE<>'D' );
内容的提问来源于stack exchange,提问作者anji
相关产品推荐
相关产品推荐

