如何在 Netezza 中比较日期?

Posted

技术标签:

【中文标题】如何在 Netezza 中比较日期?【英文标题】:How to compare dates in Netezza? 【发布时间】:2014-06-23 17:01:37 【问题描述】:

我是 Netezza 的新手。现在,我想写一个 sql 语句来反馈与定义的最近日期相对应的最近数据对象。就像返回 2014-06-10 之后的数据对象一样。或者在某个日期之前返回对象。就像返回 2014-03-10 之前的数据对象一样。怎么做? where 子句中的属性是时间戳。我认为这是一个简单的过程;但是,我找不到它。提前谢谢你们!

【问题讨论】:

我尝试了 to_date 函数并将日期格式格式化为 'YYYY-MM-DD'。有效。谢谢。 【参考方案1】:

您可以将日期或时间戳字段与通过显式调用 to_date 函数创建的日期进行比较,或者您可以简单地将其与日期的字符文字进行比较,该格式采用编译器可以识别并隐式转换为日期。例如:

TESTDB.ADMIN(ADMIN)=> select * from date_test;
        COL1
---------------------
 2014-06-23 00:00:00
 2014-06-22 00:00:00
 2014-06-24 20:44:51
(3 rows)

TESTDB.ADMIN(ADMIN)=> select * from date_test where col1 < '2014-06-23';
        COL1
---------------------
 2014-06-22 00:00:00
(1 row)

TESTDB.ADMIN(ADMIN)=> select * from date_test where col1 < to_date('2014-06-23', 'YYYY-MM-DD');
        COL1
---------------------
 2014-06-22 00:00:00
(1 row)

【讨论】:

【参考方案2】:

Netezza 具有内置功能,只需使用:

SELECT DATE(STATUS_DATE) AS DATE,
       COUNT(*) AS NUMBER_OF_             
FROM X
GROUP BY DATE(STATUS_DATE)
ORDER BY DATE(STATUS_DATE) ASC

这将只返回时间戳的日期部分,并且比使用“TO_CHAR()”将其转换为字符串更有用,因为它可以在 GROUP BY、HAVING 和其他 netezza 日期函数中使用。 (TO_CHAR 方法不会)

此外,DATE_TRUNC() 函数将从时间戳中提取一个特定值(“日”、“月”、“年”等),但不超过其中一个,没有多个函数并连接。

DATE() 是对此问题的完美而简单的答案,我很惊讶在 Stack 上看到这么多对这个问题的误导性答案。我经常看到 TO_DATE,这是 Oracle 的功能,但不适用于 Netezza。

此外,TO_DATE 函数上方是 Oracle 的版本,但不适用于 Netezza。

【讨论】:

【参考方案3】:

至少对我来说,Netezza 接受 DATE 和 TO_DATE。换句话说,以下语句产生完全相同的结果:

SELECT COL_NAME FROM TABLE_NAME WHERE COL_NAME&gt;=DATE('2016-01-01')

SELECT COL_NAME FROM TABLE_NAME WHERE COL_NAME&gt;=TO_DATE('2016-01-01','YYYY-MM-DD')

SELECT COL_NAME FROM TABLE_NAME WHERE COL_NAME&gt;=TO_DATE('20160101','YYYYMMDD')

【讨论】:

以上是关于如何在 Netezza 中比较日期?的主要内容,如果未能解决你的问题,请参考以下文章

Netezza 如何从 MON DD YYYY hh:mi am 格式的字符中读取日期时间。我得到一个无效的日期

如何使用 postgresql/netezza 从日期时间中减去天数或月数

检查 Netezza 中的日期值

Netezza:如何将 varchar 转换为日期

如何更改 Netezza 中的日期格式?

如何优化 Netezza 中的表以补充日期条件的联接