SQL查询如何匹配给定datetime列表记录,解决IN子句语法报错
报错原因
SAP衍生数据库严格遵循SQL标准的标识符引用规则:双引号"会被识别为数据库对象(表、列、视图等)的定界符,你用双引号包裹datetime字符串时,数据库会将"2015-07-23 09:02:11"判定为你要引用名为2015-07-23 09:02:11的列,自然会抛出找不到对应列的错误。
正确写法
将所有datetime值的外层包裹符号从双引号替换为单引号'即可,单引号才是SQL标准中用于标记字符串字面量的符号:
SELECT TABLE.DATE FROM TABLE WHERE TABLE.DATE IN ('2015-07-23 09:02:11', '2016-06-15 17:23:55', '2017-08-01 23:15:43', '2019-03-12 11:12:32', ...);
可选优化
如果表中DATE字段的类型为DATE而非DATETIME/TIMESTAMP,可显式添加类型转换避免隐式转换带来的性能损耗,示例如下(适配SAP系数据库语法):
SELECT TABLE.DATE FROM TABLE WHERE TABLE.DATE IN ( TO_TIMESTAMP('2015-07-23 09:02:11', 'YYYY-MM-DD HH24:MI:SS'), TO_TIMESTAMP('2016-06-15 17:23:55', 'YYYY-MM-DD HH24:MI:SS'), ... );
内容的提问来源于stack exchange,提问作者Ohumeronen
相关产品推荐
相关产品推荐

