日期列引发SQL查询报错:移除WHERE子句后提示无效日期
报错原因解析
1. CASE语句的局限性导致转换失败
你写的CASE逻辑只过滤了Cust_PO_Date = '00000000'这种无效值,但表中还存在YYYY-MM-DD格式的字符串。当这些带横杠的记录走到ELSE分支时,CAST(Cust_PO_Date AS DATE FORMAT 'YYYYMMDD')会因为字符串格式与指定的YYYYMMDD无分隔符格式不匹配,直接抛出"Invalid date supplied"错误。
而加上WHERE Cust_Name='ABC'时,刚好该筛选后的数据集里没有YYYY-MM-DD格式的记录,所以CAST能正常执行;一旦移除WHERE条件,全表扫描时碰到带横杠的日期字符串,转换就会失败。
2. TRYCAST未生效的可能原因
如果你的TRYCAST写法是TRYCAST(Cust_PO_Date AS DATE FORMAT 'YYYYMMDD'),那问题依然存在——因为指定了严格的YYYYMMDD格式,带横杠的字符串还是无法被识别,TRYCAST也没法完成转换。只有当你不指定FORMAT,让TRYCAST自动识别常见日期格式时,才能兼容两种格式的字符串。
内容的提问来源于stack exchange,提问作者Jack French
相关产品推荐
相关产品推荐

