sql-server - nvl 不是可识别的内置函数名称

标签 sql-server function built-in isnull 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. 

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

最佳答案

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))

更好的是,使用标准 ANSI 的 COALESCE() 并被 Oracle 和 SQL 服务器接受

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))

SQL NULL Functions

关于sql-server - nvl 不是可识别的内置函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44069662/

相关文章:

sql - 通过分区聚合相邻行

sql-server - Varchar 和 nvarchar 隐式转换为 int 的不同之处

c - 从两个数组中取出正数并从中创建第三个

c - 函数接收字符数组作为参数并返回字符数组

bash - 如何在 Bash 中使用读取命令?

sql-server - SQL Server - 查询最近的日期范围

c# - 向数据库中插入数据,无法弄清楚

c - 声明指向从结构定义中接受结构的函数的指针?

c++ - 内置运算符候选人

matlab - 如何定位内置函数的定义位置?