首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对本机函数'ISNULL‘的调用中的参数计数错误

对本机函数'ISNULL‘的调用中的参数计数错误
EN

Stack Overflow用户
提问于 2014-01-27 20:30:12
回答 3查看 57.1K关注 0票数 25

我有一个查询,我正试图从MS SQL Server2008转换为MySQL。它在MSSQL上运行得很好,我得到了错误"Incorrect parameter count in the call to native function 'ISNULL'“。

我该如何解决这个问题?

代码语言:javascript
复制
SELECT DISTINCT
    dbo.`@EIM_PROCESS_DATA`.U_Tax_year,
    dbo.`@EIM_PROCESS_DATA`.U_Employee_ID,
    CASE
        WHEN dbo.`@EIM_PROCESS_DATA`.U_PD_code = 'SYS033' THEN SUM(dbo.`@EIM_PROCESS_DATA`.U_Amount)
    END AS PAYE,
    CASE
        WHEN dbo.`@EIM_PROCESS_DATA`.U_PD_code = 'SYS014' THEN SUM(dbo.`@EIM_PROCESS_DATA`.U_Amount)
    END AS TOTALTAXABLE,
    dbo.OADM.CompnyName,
    dbo.OADM.CompnyAddr,
    dbo.OADM.TaxIdNum,
    dbo.OHEM.lastName + ', ' + ISNULL(dbo.OHEM.middleName, '') + '' + ISNULL(dbo.OHEM.firstName, '') AS EmployeeName
FROM
    dbo.`@EIM_PROCESS_DATA`
        INNER JOIN
    dbo.OHEM ON dbo.`@EIM_PROCESS_DATA`.U_Employee_ID = dbo.OHEM.empID
        CROSS JOIN
    dbo.OADM
GROUP BY dbo.`@EIM_PROCESS_DATA`.U_Tax_year , dbo.`@EIM_PROCESS_DATA`.U_Employee_ID , dbo.OADM.CompnyName , dbo.OADM.CompnyAddr , dbo.OADM.TaxIdNum , dbo.OHEM.lastName , dbo.OHEM.firstName , dbo.OHEM.middleName , dbo.`@EIM_PROCESS_DATA`.U_PD_code

MySQL

代码语言:javascript
复制
SELECT DISTINCT 
     processdata.taxYear, processdata.empID, 
     CASE WHEN processdata.edCode = 'SYS033' THEN SUM (processdata.amount) END AS PAYE, 
     CASE WHEN processdata.edCode = 'SYS014' THEN SUM (processdata.amount) END AS TOTALTAXABLE, 
     company.companyName, company.streetAddress, company.companyPIN, employeemaster.lastName + ', ' + IFNULL(employeemaster.middleName, '') 
     + ' ' + IFNULL(employeemaster.firstName, '') AS EmployeeName
FROM         
     processdata INNER JOIN
     employeemaster ON processdata.empID = employeemaster.empID 
     CROSS JOIN company
     GROUP BY processdata.taxYear, processdata.empID, company.companyName, company.streetAddress, company.companyPIN, 
     employeemaster.lastName, employeemaster.firstName, employeemaster.middleName, processdata.edCode
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-27 20:32:25

ISNULL在MySQL中的等价物是IFNULL

如果expr1不为空,则

()返回expr1;否则返回expr2。

也许还可以看看SQL NULL Functions

The ISNULL from MySQL is used to check if a value is null

如果

为NULL,则ISNULL()返回1,否则返回0。

票数 70
EN

Stack Overflow用户

发布于 2014-01-27 20:36:43

我建议您切换到ANSI标准函数coalesce()

代码语言:javascript
复制
(dbo.OHEM.lastName + ', ' + coalesce(dbo.OHEM.middleName, '') + '' + coalesce(dbo.OHEM.firstName, '')
) AS EmployeeName

您还可以通过包含表别名来使查询更易于阅读。

编辑:

需要注意的是,我似乎错过了转换的方向。MySQL查询将使用concat()

代码语言:javascript
复制
CONCAT(OHEM.lastName, ', ', coalesce(OHEM.middleName, ''),
       coalesce(concat(' ', OHEM.firstName), '')
      ) AS EmployeeName
票数 2
EN

Stack Overflow用户

发布于 2019-01-24 06:15:39

在对包含ISNULL(value)的查询运行JUnit测试时,我得到了一个错误,错误是ISNULL需要两个参数。我通过更改查询以使value is null和代码工作相同来修复此问题,同时测试现在也可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21380956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档