带有两个日期列的 sql 查询“where 子句”
Posted
技术标签:
【中文标题】带有两个日期列的 sql 查询“where 子句”【英文标题】:sql query "where clause" with two date columns 【发布时间】:2021-01-03 21:47:41 【问题描述】:我有一个日期列和另一个日期列作为发票日期。 示例:
虽然在 Excel 中,我可以将 InvDate 列过滤到“01-12-20 之前”并将 DATE 列过滤到“上个月”然后它给我预期结果如下:
所以,我试过这样的 SQL:
SELECT DATE, InvDate FROM `MyTable`
WHERE InvDate < '2020-12-01'
AND DATE >= '2020-12-01'
AND DATE <= '2020-12-31'
所以我认为第一个“地点”的意思是:所有发票日期在 2020 年 12 月 1 日之前, 第二个和第三个“地点”是指:2020 年 12 月内(2020 年 12 月 1 日至 2020 年 12 月 31 日之间)的所有付款日期,所以我认为结果将是所有发票日期(日期为任何月份但 2020 年 12 月之前) 2020 年 12 月付款,但结果如下所示:
表格列的 InvDate 和 DATE 都是日期格式。 我想知道如何执行 SQL。
任何形式的回应将不胜感激。 提前谢谢你。
This question should include more details and clarify the problem.
问题是我写的那个 SQL 不能得到预期的结果。 预期结果是在 2020 年 12 月付款的 2020 年 12 月之前获得发票日期。换句话说:“这是 12 月 20 日之前的发票日期在 12 月 20 日付款”
关于“更多细节”,我很抱歉,因为我不知道如何描述我的情况开始更详细。我应该提供数据库主机、用户名和密码吗?
【问题讨论】:
【参考方案1】:您的结果表明,您的行的NULL
值基本上是invoicedate
。如果该列的默认值是0
,那么您将看到您所做的日期——或者该值是否被显式插入。这是example。
最新版本的 mysql 不允许将 '0000-00-00'
作为 date
值,除非您修改默认设置。
您可以通过回溯过去并将其添加到where
来过滤掉这些:
SELECT DATE, InvDate FROM `MyTable`
WHERE InvDate < '2020-12-01' AND
InvDate >= '1900-01-01' AND
DATE >= '2020-12-01' AND
DATE < '2021-01-01';
请注意,我在date
比较中切换了不等式。这样可以更轻松地切换到不同的月份——您不必记住该月的最后日期。
【讨论】:
嗨,戈登,谢谢您的回答。在 phpMyAdmin 中,Null 的这两个日期列的列结构设置为“No”,而 Default 的列结构设置为“None”。您的意思是我应该将其 Default 值更改为 "Null" 而不是 "None" 吗?此外,每个日期列中都没有空白行。 @karma 。 . .我建议将NULL
作为默认值。
我尝试了 NULL,然后我尝试了 NONE 作为 InvDate 默认值,并按照您的说明进行操作,但它没有给我任何结果(它只是显示标题)。
@karma 。 . .老实说,我对如何通过 phpadmin 执行此类操作并不是很熟悉。我只是使用数据库命令在数据库中设置了表。
没关系,戈登。再次感谢您的帮助。【参考方案2】:
看起来 0000-00-00 在 invdate 中被用来表示发票日期未知或不适用。
您可以添加: AND invdate '0000-00-00'
【讨论】:
您好 OwlsSleeping,谢谢您的回答。我已经尝试了您的建议,但很抱歉,它没有给我任何结果。以上是关于带有两个日期列的 sql 查询“where 子句”的主要内容,如果未能解决你的问题,请参考以下文章