mysql—两个不同列中有空值的较大值

8wtpewkr  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(430)

我比较了两个关于bug的日期列,一个是已解决的bug,另一个是已关闭的bug。我想要两者中的较大值,但是有空值(当一个bug还没有被解决或关闭时)。在忽略空值时,如何取两者中的较大值?我看到了其他的解决方案,但是您必须在代码中指定日期,因为数据集很大,所以我无法在数据集中指定日期。日期格式为mm/dd/yy hh:mm:ss pm/am

(GREATEST(dtResolved , dtClosed))
bzzcjhmw

bzzcjhmw1#

下面是另一个例子:

GREATEST(COALESCE(UNIX_TIMESTAMP(STR_TO_DATE(dtResolved, '%m/%d/%Y %r')), 0), COALESCE(UNIX_TIMESTAMP(STR_TO_DATE(dtClosed, '%m/%d/%Y %r')), 0))

此代码将在时间戳中为您提供更大的日期。原因是 GREATEST 函数将以字符串形式返回日期,年、月或日期之间不带空格或斜杠。所以时间戳是一个很好的方法来防止这种情况。
以防万一 dtResolved 以及 dtClosednull 你可以比较一下,用 COALESCE0 而不是两者的价值。它将防止您的查询崩溃。它会回来的 0 .
就像tim告诉你的,将字符串date转换为date对象并不是一个坏主意。对于存在的多个函数,最好使用date对象。

6fe3ivhb

6fe3ivhb2#

这个怎么样:

GREATEST(COALESCE(dtResolved , dtClosed), COALESCE(dtClosed, dtResolved))

使用这个逻辑,如果两个日期都不是 NULL ,则取两者中的较大值。如果有人 NULL ,那么你就不会 NULL 日期。
编辑:
日期格式为mm/dd/yy hh:mm:ss pm/am
这听起来像是你将日期存储为文本,总是一个坏主意。要使上述建议起作用,您必须首先将文本转换为日期:

STR_TO_DATE('02/28/2014 09:30:05 AM', '%m/%d/%Y %r')

相关问题