校验FISCAL_START日期范围的SQL查询报缺少关键字错误如何解决
问题原因
你提交的SQL语句混用了两种CASE表达式的语法规则,导致触发缺少关键字报错:
- 简单CASE表达式语法为
CASE 匹配字段 WHEN 匹配值 THEN 返回值 ... ELSE 默认值 END,要求WHEN后直接跟匹配值,不需要写完整判断条件 - 搜索CASE表达式语法为
CASE WHEN 判断条件 THEN 返回值 ... ELSE 默认值 END,要求CASE后不跟任何字段,WHEN后写完整判断逻辑
你当前的写法在CASE后指定了FISCAL_START字段,WHEN后又写了完整的FISCAL_START = 'xxx'判断条件,不符合任意一种合法语法,因此数据库抛出语法错误。
修复方案
可任选以下任意一种符合语法的写法修改:
方案1:使用简单CASE表达式(适合等值匹配场景,写法更简洁)
SELECT FISCAL_START,DESCRIPTION, ( CASE FISCAL_START WHEN '2014-03-31' THEN DESCRIPTION WHEN '2014-09-29' THEN DESCRIPTION ELSE 'Test Failed' END ) AS CHECK_RESULT FROM GL_PERIOD
方案2:使用搜索CASE表达式(方便后续扩展非等值判断逻辑)
SELECT FISCAL_START,DESCRIPTION, ( CASE WHEN FISCAL_START = '2014-03-31' THEN DESCRIPTION WHEN FISCAL_START = '2014-09-29' THEN DESCRIPTION ELSE 'Test Failed' END ) AS CHECK_RESULT FROM GL_PERIOD
补充说明
如果FISCAL_START字段是DATE类型而非字符串类型,部分数据库会因为字符串和日期类型不匹配报错,可根据你使用的数据库类型对日期值做显式转换:
- Oracle写法:
TO_DATE('2014-03-31','YYYY-MM-DD') - MySQL写法:
STR_TO_DATE('2014-03-31','%Y-%m-%d') - SQL Server写法:
CAST('2014-03-31' AS DATE)
内容的提问来源于stack exchange,提问作者Moses76
相关产品推荐
相关产品推荐

