Oracle Where条款中的日期发布



我无法获得符合where子句的日期列。不管我做什么,它都不会按日期过滤。我尝试了to_char和to_date的所有组合,但都失败了。

HAVING TO_CHAR(PAYMASTR.CHECK_DATE,'MM/DD/YYYY') > '01/01/2021'

我还尝试了下面的代码,其中包含to_char和to_date的所有组合。

HAVING PAYMASTR.CHECK_DATE >= TO_DATE('01-01-2021 12:00:00 AM',
'MM-DD-YYYY HH:MM:SS AM')

date类型的check_date。

结果集:

|COMPANY|EMPLOYEE|PAY_SUM_GRP|PAY_GRADE RATE|WAGE_AMOUNT|NET_PAY_AMT|GROSS_PAY|CHECK_DATE|
|-------|--------|-----------|--------------|-----------|-----------|---------|----------|
|2|5|REG    09|21.98|175.84|1459.96|2263.19|1/19/2007 12:00:00 AM|
|2|5|REG    09|21.98|175.84|1663.93|2589.43|1/5/2007 12:00:00 AM|

如果CHECK_DATE列的数据类型是DATE(应该是!如果是VARCHAR2,则说明您做错了!(,则

having check_date > date '2021-01-01'

即将日期与日期文字进行比较。


您发布的第二个代码几乎可以:

HAVING PAYMASTR.CHECK_DATE >= TO_DATE('01-01-2021 12:00:00 AM', 'MM-DD-YYYY HH:MI:SS AM')
         --
MI for minutes; MM is for month

我在代码项目上发现了这篇文章,它帮了我一把。我很难让查询遵守queru中的日期参数。将会话设置为NLS_DATE_FORMAT有效。不确定它可能有什么其他影响。必须与DBA交谈。

代码项目

这一切都是关于Oracle如何存储和使用日期DATATYPE日期由七个部分组成世纪、年、月、日、小时、分钟、秒并且所有这些组件占用7个字节的存储空间。无论何时从表中获取Date列,日期值都会以可读性更强的形式进行格式化,并且此格式是在nls_Date_format参数中设置的。

我假设您是按CHECK_DATE分组的,否则您需要使用WHERE子句添加此日期筛选器。

因此,首先检查列check_DATE的数据类型如果是日期,则

HAVING CHECK_DATE >= TO_DATE('01-01-2021', 'MM-DD-YYYY')

如果省略的小时四舍五入为上午12点,则不必提供小时、分钟和秒;如果使用24小时格式,则不需要提供00;或者,如果你也想有几个小时,那么在几分钟内使用MM而不是MI

HAVING CHECK_DATE >= TO_DATE('01-01-2021 00:00:00', 'MM-DD-YYYY HH24:MI:SS')

这没有道理

HAVING TO_CHAR(PAYMASTR.CHECK_DATE,'MM/DD/YYYY') > '01/01/2021'

您想要比较日期而不是字符,to_char将为您提供一个与另一个字符串"01/01/2021"没有比较意义的字符串。

因此,如果您不使用WHERE子句按CHECK_DATE用户筛选条件进行分组或者检查check_DATE的数据类型(如果不是DATE(,将其更改为DATE。

最新更新