NVL2功能不存在? mysql查询

时间:2010-12-22 18:12:55

标签: mysql

我正在尝试进行一些查询但是我一直在收到错误,现在我认为mysql安装有问题。有人能告诉我这个查询是否有错误吗?

         SELECT settings.ID, 
                settings.name, 
                settings.description, 
                NVL2(userSettings.value, userSettings.value, settings.default) 
           FROM settings 
LEFT OUTER JOIN userSettings ON (settings.ID = userSettings.settingID)

我得到的错误说函数databaseX.NVL2不存在

6 个答案:

答案 0 :(得分:2)

当建议使用ANSI标准等效替代方案时,我建议远离供应商特定功能。例如,NVL和IFNULL可以(通常)用COALESCE替换。

你也可以使用CASE WHEN,这意味着在下行方面会有更多的打字,但好处是有SQL Server背景的人不需要处理Oracles DECODE()或NVL或者NVL2,因为逻辑就在代码中。

答案 1 :(得分:1)

这可能是因为NVL2是Oracle功能,而不是MySQL功能。我相信你在MySQL中寻找的功能是COALESCE()

答案 2 :(得分:1)

正如@Eric Petroelje所说,NVL2()是Oracle功能,而不是MySQL。但是MySQL有自己的等价物,可以在这种情况下使用:IFNULL()

SELECT ... IFNULL(userSettings.value, settings.default) ...

答案 3 :(得分:1)

经过多次尝试和错误探测,我发现这种方法可以模拟Oracle的NVL2功能。它不是很优雅,但它有效

SELECT IF(LENGTH(ISNULL(FieldName, '')) > 0, 'Not NULL Value', 'Null Value') FROM TableName

答案 4 :(得分:0)

我认为这可以帮到你

IF(expr1,expr2,expr3)

如果expr1为TRUE(expr1<> 0且expr1<> NULL),则IF()返回expr2;否则返回expr3。 IF()返回数值或字符串值,具体取决于使用它的上下文。

答案 5 :(得分:0)

或者,您可以将NVL2替换为:

IF (userSettings.value IS NULL, userSettings.value, settings.default)