gpt4 book ai didi

sql - 使用按日期分组的 sql 查询

转载 作者:行者123 更新时间:2023-12-04 14:45:49 24 4
gpt4 key购买 nike

我正在尝试编写此查询以检索按日期分组的记录数:

SELECT system_date,count (is_paid)
FROM TPWEB.TP_CLIENT_TENDER_TRANS
where system_date between '1-DEC-12' and '31-DEC-12'
group by system_date

但是,我得到了没有分组的结果,例如:
01-DEC-12   1
01-DEC-12 1
01-DEC-12 1
01-DEC-12 1

怎么了...

最佳答案

照原样 documented DATE 数据类型是一个日期时间,因此除了您更合理地期望的属性之外,还存储小时、分钟和秒,并以具有此名称的数据类型存储。如果您想计算一天,您需要删除日期的时间部分。这是 TRUNC() 的默认行为,所以这样做 trunc(<date>)是你所需要的全部。

在这一点上有两点值得注意:

  • 我假设 system_date是您表中的一列,而不是对 SYSDATE 的误解
  • 您的 between 子句完全不正确,非常危险。

    通过表示您的日期的方式,您的 NLS_DATE_FORMAT 似乎是 DD-MON-YYYY(有关更多详细信息,请参阅 another answer of mine)。这意味着当您将日期隐式转换为字符时,它会以这种格式转换。

    您没有使用 datetime literalexplicit conversion您正在比较的值中,这意味着您的日期被隐式转换为字符。但是,当您进行比较时,您会发现事情并不总是像看起来的那样。字符比较通常是二进制的;这意味着 2 月 10 日不在 1 月 10 日和 3 月 10 日之间; “三月”比“一月”小。

    在进行日期比较时,始终显式转换日期并始终使用日期。

  • 将所有这些放在一起,您的查询变为:
    select trunc(system_date), count(is_paid)`
    from TPWEB.TP_CLIENT_TENDER_TRANS
    where system_date between date '2012-12-01' and date '2012-12-31'
    group by trunc(system_date)

    关于sql - 使用按日期分组的 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171768/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com