2012-09-17 144 views
1

我试图查询在昨天上午6点和今天上午6点之间发生的数据。db2日期格式concat特定时间

我有一个串联问题。

这是我试过的。

Where update_time between date(CURRENT DATE,'mm/dd/yyyy 06:00:00')- 1 DAYS 
         and date(CURRENT DATE,'mm/dd/yyyy 06:00:00') 
+0

你真的不应该使用'BETWEEN' - 如果你在_exactly_ 6AM有一个事件会发生什么?因为它会被包含在_both_ days(今天,明天),可能不是你想要的。使用显式范围(包含下限包含,上限排他或'update_time> = CURRENT_TIMESTAMP - 1天和update_time 'updated_at') - 它是噪声,并且可能会过时。 –

回答

0

试试这个:

WHERE UPDATE_TIME 
BETWEEN TIMESTAMP(CHAR(CURRENT DATE,ISO) || ' 06:00:00') - 1 DAY 
AND TIMESTAMP(CHAR(CURRENT DATE,ISO) || ' 06:00:00') 

更新回答X-Zero的评论:

的DB2功能CHAR(CURRENT DATE,ISO)取当前日期,并将其转换为在ISO格式的字符串。以今天的日期,CHAR函数将返回“2012-09-18”。

接下来,我们将(||)时间字符串连接到日期字符串。时间字符串中的空格以正确的格式创建字符DB2时间戳。 “2012-09-18 06:00:00”。

最后,DB2函数TIMESTAMP采用字符DB2时间戳并将其转换为实际的DB2时间戳。

+0

您不需要(至少明确地)将'CURRENT_DATE'强制转换为字符,以及时间部分中的前导空格是什么?此外,你可以阻止他使用'BETWEEN' ... –

+0

@ X-Zero:我测试了这个WHERE子句,我知道它的工作原理。 –

+0

我确定它的确如此;我只是想知道为什么你正在执行演员,当该函数的第一件事是将该字符日期_back_转换为实际的日期类型。并且我警告不要“BETWEEN”,因为在随后的日子里执行这个声明将包括多次更新在_exactly_6AM的行 - “今天”和“明天”。 –