可以在SQL Server和MS Access中使用的COALESCE,IFNULL或NZ()函数

Lar*_*tig 9 sql sql-server ms-access coalesce

我有一个项目可以使用SQL Server或MS Access作为数据存储.在一个SELECT语句中,我必须对单个列和单个值执行COALESCE操作,如下所示:

SELECT COALESCE([Amount], 0) FROM PaymentsDue;
Run Code Online (Sandbox Code Playgroud)

我想编写一个SQL语句,它将在SQL Server和MS Access中正确执行.直接感兴趣的SQL Server版本是2008,尽管可以优选跨版本的解决方案.

今天早些时候,有人能够向我展示一个SQL技巧,它允许我使用单个SELECT语句来有效地将DATETIME CAST到DATE.我不知道是否有人也有类似的伎俩来执行在可应用于方式COALESCE(如,IFNULL或NZ)操作 SQL Server和MS访问?

one*_*hen 7

我不认为在两个平台上都有任何相同功能的语法.

注意Nz()仅在使用Access用户界面时可用.

以下是一些可以COALESCE很容易转换的建议,尽管重复列很痛苦:

样本1:

SELECT IIF([Amount] IS NULL, 0, [Amount]) FROM PaymentsDue;
Run Code Online (Sandbox Code Playgroud)

样本2:

SELECT SWITCH([Amount] IS NULL, 0, TRUE, [Amount]) FROM PaymentsDue;
Run Code Online (Sandbox Code Playgroud)


Stu*_*rth 6

这会有效,但它很笨重:

SELECT Amount 
FROM PaymentsDue
WHERE Amount IS NOT NULL
UNION ALL
SELECT 0 AS Amount 
FROM PaymentsDue
WHERE Amount IS NULL
Run Code Online (Sandbox Code Playgroud)

显然,如果您有多个列,这很快就会无法管理.


小智 5

在模块中创建自定义公共函数。

Public Function COALESCE(InputValue, ValueIfNull)
   COALESCE = nz(InputValue, ValueIfNull)
End Function
Run Code Online (Sandbox Code Playgroud)

添加错误处理等,进行改进。

现在,您可以COALESCE在 MS Access 和 SQL 中使用该函数。