SQL nvl等价 - 没有if / case语句& isnull&合并

时间:2009-01-16 16:37:53

标签: sql syntax informix null

SQL中是否有任何与nvl()等效的函数?

或者在某些情况下足够接近以相同方式使用的东西?

<小时/> 更新:
否如果陈述
无案例陈述
无遗嘱无合并

select nvl (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;


(expression)

SODIUFOSDIUFSDOIFUDSF

1 row(s) retrieved.

select isnull (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;

  674: Routine (isnull) can not be resolved.
Error in line 1
Near character position 8

select coalesce (purge_date,"SODIUFOSDIUFSDOIFUDSF") from id_rec where id=36581;

  674: Routine (coalesce) can not be resolved.
Error in line 1
Near character position 8

select decode(purge_date, NULL, "01/01/2009", purge_date) from id_rec where id=74115;

  800: Corresponding types must be compatible in CASE expression.
Error in line 1
Near character position 57

4 个答案:

答案 0 :(得分:5)

ISNULL(单个替换)

COALESCE(返回其参数中的第一个非空表达式。)

答案 1 :(得分:3)

答案 2 :(得分:2)

您似乎正在使用Informix。

AFAIK,那里有DECODE:

DECODE(field, NULL, 'it is null, man', field)应该与NVL(field, 'it is null, man')

给出相同的结果

请发布您正在使用的RDBMS的确切名称和版本。

答案 3 :(得分:2)

生成800错误的DECODE语句的问题很简单。 '01/01/2009'被视为一个字符串,它实际上是产生错误的第四个参数。

感谢DECODE语句的输入和输出可以是不同的数据类型,因此引擎要求您在这种情况下更明确。 (您希望purge_date强制转换为字符串或字符串'01/01/2009',还是将字符串参数解析为日期或原始日期?引擎无法知道。

试试这个:

SELECT DECODE(purge_date, NULL, '01/01/2009'::DATE, purge_date)

您也可以将第三个参数写为:

    DATE('01/01/2009')
    MDY(1,1,2009)

取决于版本和个人偏好。