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访问?
我不认为在两个平台上都有任何相同功能的语法.
注意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)
这会有效,但它很笨重:
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 中使用该函数。
| 归档时间: |
|
| 查看次数: |
27781 次 |
| 最近记录: |