nvl不是公认的内置函数名称

Aru*_*nam 1 sql-server function isnull built-in nvl

我在SQL Server上执行以下查询,但出现错误:

SELECT DISTINCT t1.p_id "Id",
(TO_CHAR("sysdate", 'YYYY') + least(SIGN(("sysdate" - to_date('01-Aug-' | | TO_CHAR("sysdate", 'YYYY'), 'DD-Mon-RRRR'))), 0)) "Year"

FROM 
   t1,
   t7,
   t9
WHERE 
   t9.ei_id(+)          = t7.e_id
AND (t7.e_student        = t1.p_id)
AND (t7.e_module         = t8.m_id)
AND (NVL(t9.ei_q18m06, t7.e_end) > '31-Jul-' | | (TO_CHAR("sysdate", 'YYYY') + least(SIGN(("sysdate" - to_date('01-Aug-' | | TO_CHAR("sysdate", 'YYYY'), 'DD-Mon-RRRR'))), 0) + - 5))

Error:

'nvl' is not a recognized built-in function name. 
Run Code Online (Sandbox Code Playgroud)

知道如何避免这种情况吗?

Tho*_*s G 5

NVL 是Oracle语法

SQL Server中的相应功能是ISNULL

AND (ISNULL(t9.ei_q18m06, t7.e_end) > '31-Jul-' | | (TO_CHAR("sysdate", 'YYYY') + least(SIGN(("sysdate" - to_date('01-Aug-' | | TO_CHAR("sysdate", 'YYYY'), 'DD-Mon-RRRR'))), 0) + - 5))
Run Code Online (Sandbox Code Playgroud)

更好的是,使用标准ANSI并由Oracle和SQL Server接受的COALESCE()

AND (COALESCE(t9.ei_q18m06, t7.e_end) > '31-Jul-' | | (TO_CHAR("sysdate", 'YYYY') + least(SIGN(("sysdate" - to_date('01-Aug-' | | TO_CHAR("sysdate", 'YYYY'), 'DD-Mon-RRRR'))), 0) + - 5))
Run Code Online (Sandbox Code Playgroud)

SQL NULL函数

  • 或使用标准ANSI的“ COALESCE()”,并且应在所有平台上使用。 (4认同)