1

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

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


更新:
没有 if 语句
没有 case 语句
没有 isnull
没有合并

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

4 回答 4

5

ISNULL(用于单个替换)

或者

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

于 2009-01-16T16:39:50.780 回答
3

SQL Server:IsNull 或 COALESCE http://msdn.microsoft.com/en-us/library/ms184325.aspx

Sybase:isnull 函数 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm

Postgres:虽然没有完全检查,但我找不到。建议选择 IS NULL 并从这里构建 http://archives.postgresql.org/pgsql-sql/1998-06/msg00142.php

DB2 - 合并 http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000780.htm

于 2009-01-16T16:51:53.907 回答
2

您似乎正在使用 Informix。

AFAIK,那里有解码:

DECODE(field, NULL, 'it is null, man', field)应该给你相同的结果NVL(field, 'it is null, man')

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

于 2009-01-16T16:41:19.090 回答
2

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

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

试试这个:

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

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

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

取决于版本和个人喜好。

于 2009-01-19T01:22:45.740 回答