如何在 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>=DATE('2016-01-01')
SELECT COL_NAME FROM TABLE_NAME WHERE COL_NAME>=TO_DATE('2016-01-01','YYYY-MM-DD')
SELECT COL_NAME FROM TABLE_NAME WHERE COL_NAME>=TO_DATE('20160101','YYYYMMDD')
【讨论】:
以上是关于如何在 Netezza 中比较日期?的主要内容,如果未能解决你的问题,请参考以下文章
Netezza 如何从 MON DD YYYY hh:mi am 格式的字符中读取日期时间。我得到一个无效的日期