我比较了两个关于bug的日期列,一个是已解决的bug,另一个是已关闭的bug。我想要两者中的较大值,但是有空值(当一个bug还没有被解决或关闭时)。在忽略空值时,如何取两者中的较大值?我看到了其他的解决方案,但是您必须在代码中指定日期,因为数据集很大,所以我无法在数据集中指定日期。日期格式为mm/dd/yy hh:mm:ss pm/am
(GREATEST(dtResolved , dtClosed))
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 以及 dtClosed 是 null 你可以比较一下,用 COALESCE 与 0 而不是两者的价值。它将防止您的查询崩溃。它会回来的 0 .就像tim告诉你的,将字符串date转换为date对象并不是一个坏主意。对于存在的多个函数,最好使用date对象。
GREATEST
dtResolved
dtClosed
null
COALESCE
0
6fe3ivhb2#
这个怎么样:
GREATEST(COALESCE(dtResolved , dtClosed), COALESCE(dtClosed, dtResolved))
使用这个逻辑,如果两个日期都不是 NULL ,则取两者中的较大值。如果有人 NULL ,那么你就不会 NULL 日期。编辑:日期格式为mm/dd/yy hh:mm:ss pm/am这听起来像是你将日期存储为文本,总是一个坏主意。要使上述建议起作用,您必须首先将文本转换为日期:
NULL
STR_TO_DATE('02/28/2014 09:30:05 AM', '%m/%d/%Y %r')
2条答案
按热度按时间bzzcjhmw1#
下面是另一个例子:
此代码将在时间戳中为您提供更大的日期。原因是
GREATEST
函数将以字符串形式返回日期,年、月或日期之间不带空格或斜杠。所以时间戳是一个很好的方法来防止这种情况。以防万一
dtResolved
以及dtClosed
是null
你可以比较一下,用COALESCE
与0
而不是两者的价值。它将防止您的查询崩溃。它会回来的0
.就像tim告诉你的,将字符串date转换为date对象并不是一个坏主意。对于存在的多个函数,最好使用date对象。
6fe3ivhb2#
这个怎么样:
使用这个逻辑,如果两个日期都不是
NULL
,则取两者中的较大值。如果有人NULL
,那么你就不会NULL
日期。编辑:
日期格式为mm/dd/yy hh:mm:ss pm/am
这听起来像是你将日期存储为文本,总是一个坏主意。要使上述建议起作用,您必须首先将文本转换为日期: