繁体   English   中英

sql 使用两个日期列查询“where 子句”

[英]sql query “where clause” with two date columns

我有一个日期列和另一个日期列作为发票日期。
例子:
在此处输入图像描述

在 Excel 中,我可以将 InvDate 列过滤为“ before 01-12-20 ”并将 DATE 列过滤为“ Last Month ”,然后它给我的预期结果如下:
在此处输入图像描述

所以,我试过 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 日之前的发票日期在 2020 年 12 月 20 日付款”

关于“更多细节”,我很抱歉,因为我不知道如何描述我的情况开始更详细。 我应该提供数据库主机、用户名和密码吗?

您的结果表明,您的行实际上具有invoicedateNULL值。 如果该列被赋予默认值0 ,那么您将看到您所做的日期 - 或者该值是否被显式插入。 这是一个例子

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比较中切换了不等式。 这使得切换到不同月份变得更容易——您不必记住该月的最后日期。

看起来 0000-00-00 在 invdate 中用于表示发票日期未知或不适用。

您可以添加: AND invdate <> '0000-00-00'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM