2012-04-26 41 views
1

我想使用CASE语句来检查一个有条件的参数,如if parameter is an empty string I want to return Nil if not then string 'test',但这不起作用。此外,我不希望使用COALESCE在select子句中使用case?

select TEST=CASE '' WHEN '' THEN 'Nil' ELSE 'Test' END,current_timestamp from sysibm.sysdummy1; 

我得到一个错误

SQL状态:42601 供应商代码:-104 消息:[SQL0104]令牌=无效。有效令牌:+ - AS。原因。 。 。 。 。 :在标记=时检测到语法错误。令牌=不是有效的令牌。有效令牌的部分列表是+ - AS。此列表假定该声明在令牌之前是正确的。该错误可能在语句中更早,但该语句的语法在此之前似乎是有效的。恢复。 。 。 :执行以下一项或多项操作并再次尝试请求: - 验证token =区域中的SQL语句。纠正陈述。错误可能是一个缺少逗号或引号,可能是拼错的单词,或者它可能与子句的顺序有关。 - 如果错误标记为,更正SQL语句,因为它不以有效的子句结束。

+0

虽然我承认[约束写作(http://en.wikipedia.org/wiki/Constrained_writing)可以是一个美妙过去的时间,你有避免'COALESCE()'的理由吗? – onedaywhen 2012-04-26 09:58:45

+0

@onedaywhen我有一个水晶报表参数传递给我的查询,该参数可能是空的或以其他方式。如果我没有错,那么COALESCE在数据库列上工作,所以是受限制的写作有时会工作;),你能用COALESCE使用参数重现我的查询吗?达米安。 – 2012-04-26 11:12:34

+0

因为我做了Crystal和DB2,所以答案肯定不是! – onedaywhen 2012-04-26 13:26:01

回答

1
select CASE '' WHEN '' THEN 'Nil' ELSE 'Test' END as TEST,current_timestamp from sysibm.sysdummy1; 

更换由预期列东西


欲了解更多信息,请检查THIS

+1

@ aF。感谢您的链接。我通过稍后指定别名来工作。 – 2012-04-26 09:40:23

+0

@DamienJoe罗杰,回答更新:) – 2012-04-26 09:41:55

+0

你需要删除一个选择。 – 2012-04-26 11:13:16

0

你的情况下,语法不正确正确的是,

select TEST=CASE <fieldname> WHEN '' THEN 'Nil' ELSE 'Test' END,current_timestamp from sysibm.sysdummy1;