可以在 h2 字符串中使用 ISNULL 或 IFNULL
Posted
技术标签:
【中文标题】可以在 h2 字符串中使用 ISNULL 或 IFNULL【英文标题】:Can ISNULL or IFNULL in h2 strings 【发布时间】:2018-04-02 16:56:45 【问题描述】:我正在计算每月的平均数量,我正在使用 h2 进行这样的查询
SELECT t.truckCode,
monthname(orderDate) as month,
IFNULL (avg(petrolQty),0) as avgPetrolQty
from
truck t left join orderz o
on
t.truckId = o.truckId
group by t.truckCode, monthname(orderDate)
order by t.truckCode, monthname(orderDate)
所以如果 avg 为空,我得到 0,这很好,但它是我想使用的左连接,所以我可以看到系统中的所有卡车。问题是当卡车从来没有订单monthname(orderDate)返回null时,我如何更改它以获得一些默认值,我尝试了ifnull但没有工作,我更愿意返回一个字符串,例如,未宣布
对于上面的查询,这是我的结果
TRUCKCODE MONTH AVGPETROLQTY
BY2004 null 0.0
BY2354 January 13.0
BY2874 January 13.0
BY2994 null 0.0
BY8754 January 13.0
如何将 null 更改为一些默认字符串
SELECT t.truckCode, COALESCE(monthname(orderDate),'Not Announced') as month, IFNULL (avg(petrolQty),0) as avgPetrolQty
from truck t left join orderz o
on t.truckId = o.truckId
group by t.truckCode, monthname(orderDate)
order by t.truckCode, orderDate
【问题讨论】:
这会解决月份名称为空的问题吗? 不一样的问题我想用 orderDate 解决 null 问题 您能否将更改月份名称部分的查询结果粘贴到 CASE WHEN(orderDate 为 null 然后 'NOT ANNOUNCED' ELSE monthname(orderDate) 嗨,我刚刚发布了我上一个查询的结果,你能安排你的查询以便我理解它或放置在哪里,我对某些功能很陌生@Graciano 刚刚更新了我的代码 【参考方案1】:您可以使用函数 COALESCE 来检查月份是否为空,然后使用默认值,例如“未宣布”。
SELECT t.truckCode,
COALESCE(monthname(orderDate),'Not Announced') as month,
IFNULL (avg(petrolQty),0) as avgPetrolQty
from
truck t left join orderz o
on
t.truckId = o.truckId
group by t.truckCode, COALESCE(monthname(orderDate),'Not Announced')
order by 1,2;
Result:
TRUCKCODE MONTH AVGPETROLQTY
BY2004 Not Announced 0.0
BY2354 January 13.0
BY2874 January 13.0
BY2994 Not Announced 0.0
BY8754 January 13.0
【讨论】:
说订单日期必须在group by中,好像coalesce隐藏group by已经写好了 不。 select 语句中的函数作为最后一步完成。因此它不会影响 group by 子句。 但由于某种原因,它仅在我在 group by 中添加额外的 orderDate 时才有效,这是为什么呢 我张贴了检查 您发布了我的答案,那么与我的答案查询相比,您得到的结果是什么?以上是关于可以在 h2 字符串中使用 ISNULL 或 IFNULL的主要内容,如果未能解决你的问题,请参考以下文章
SQL nvl 等效 - 没有 if/case 语句 & isnull & coalesce
C# 等效于 SQL Server 中的 IsNull() 函数