Teradata SQL如何正确执行数值比较 解决比较符误判日期报错
Teradata SQL 数值区间比较报错解决方法
报错核心原因
这个报错不是比较符被Teradata误识别为时间日期操作,根源是写了SQL不支持的连续链式比较语法:
- Teradata本身原生支持
</>/<=/>=做数值比较,不需要额外转义或者特殊写法 - 你代码里的
(5 < a < 6)是Python等编程语言支持的简写形式,SQL标准不支持这种连续不等号的写法 - Teradata解析器读到
5 <的片段时,会优先匹配内置的时间间隔语法(该语法格式为数值 <间隔单位>,比如5 day、2 hour),所以才会提示期望匹配at/day/hour这类时间相关关键字。
修正后的正确代码
SQL里做区间判断必须把连续比较拆成多个独立的比较表达式,用AND/OR显式连接逻辑条件,修正后代码如下:
SELECT CASE WHEN a <= 5 THEN b WHEN a > 5 AND a < 6 THEN c ELSE 0 END FROM datadate
补充说明
- 不支持连续不等号是绝大多数SQL方言的通用规则,不是Teradata独有限制,所有多条件判断都要显式写逻辑连接符
- 可以根据实际业务的区间开闭要求调整比较符:比如区间要包含6就改成
a <= 6,单独判断大于等于10的数值直接写a >= 10即可,不会触发时间语法的解析错误。
内容的提问来源于stack exchange,提问作者Yumeng Xu
相关产品推荐
相关产品推荐

