我的目标是计算出在特定时间我的网站上有多少账户。 我允许帐户在任何时候被取消,但如果他们在我查看的月份之后被取消,那么我仍然希望他们在快照上显示为活动状态。
我的帐户
表,如下所示:
--------------------------------------------------
id | int
signUpDate | varchar
cancellationTriggeredDate | datetime (NULLABLE)
--------------------------------------------------
我编写了一个select语句来完成这个目标,如下所示:
SELECT
COUNT(*) AS January_2020
FROM
Accounts
WHERE
STR_TO_DATE(signUpDate, '%d/%m/%Y') <= STR_TO_DATE('31/01/2020', '%d/%m/%Y')
AND cancellationTriggeredDate <= '2020-01-31 00:00:00'
预期的结果将是3,这是我有多少帐户在一月份,并没有被取消后一月。 实际结果为0。 我相信这是因为不是所有我的帐户都有注销日期设置,但我不确定如何处理这件事。
为了更容易获得帮助,我创建了一个包含示例数据和模式的SQL Fiddle。
http://sqlfiddle.com/#!9/64 F3E3
替代解决方案-您可以在where
谓词中使用case when
,并使用假设较高的日期(即本世纪末)初始化CancellationTriggeredDate
,然后在Where
谓词中使用该字段进行比较。
SELECT
COUNT(*) AS January_2020
FROM
Accounts
WHERE
STR_TO_DATE(signUpDate, '%d/%m/%Y') <= STR_TO_DATE('31/01/2020', '%d/%m/%Y')
AND CASE WHEN cancellationTriggeredDate IS NULL THEN '2099-12-31' ELSE cancellationTriggeredDate END > '2020-01-31 00:00:00'
您的日期比较需要正确的取消日期。
然后可以使用或
处理null
:
SELECT COUNT(*) AS January_2020
FROM Accounts
WHERE STR_TO_DATE(signUpDate, '%d/%m/%Y') <= '2020-01-31' and
(cancellationTriggeredDate > '2020-01-31' OR
cancellationTriggeredDate IS NULL
)
这是db<;>小提琴。 请注意,上面给出的是在2020-01-31 00:00:00(即一天开始时)处于活动状态的用户。 你可能指的是不同的事情:
所有这些都使用基本相同的逻辑,只是通过调整具体的比较。
问题内容: 在Go中进行日期比较是否有任何选择?我必须根据日期和时间- 独立地对数据进行排序。因此,我可以允许一个对象在一定日期范围内发生,只要它也在一定时间范围内出现即可。在此模型中,我不能简单地选择最旧的日期,最年轻的时间/最新的日期,最新的时间和Unix()秒来比较它们。我真的很感谢任何建议。 最终,我编写了一个时间解析字符串比较模块,以检查时间是否在范围内。然而,这并不顺利。我有一些大问题
问题内容: 这是我正在尝试执行的一些代码片段: 我似乎无法比较日期和日期时间值。比较这些的最佳方法是什么?我应该将日期时间转换为日期还是相反?我如何在它们之间转换。 (一个小问题,但似乎有点令人困惑。) 问题答案: 使用该方法将日期时间转换为日期: 或者,您可以使用代替。你可以用 消除之后的时间部分。
问题内容: 我尝试通过C#的JSON解析创建标记。我在javascript中有一个关于日期时间比较的小问题。 否则不起作用!谷歌地图上有truckOnline标记。我的错误在哪里? 和在SQL中这样的LastRecordTime格式:04.12.2013 01:03:00 问题答案: 穆罕默德 看来您打错了字: 应该是(请注意逗号): 另外,您试图从日期对象创建新的日期对象,这是不正确的: 这里是
问题内容: 我正在使用moment.js格式化我的日期时间,这里有两个日期值,当一个日期大于另一个日期时,我想实现一种特定的功能。我阅读了他们的大多数文档,但没有找到实现此目的的功能。我知道会在那里。 这是我的代码: 编辑 在这里,我正在比较两个日期,即,期望第一个日期大于第二个日期,但是它总是转到else条件。不知道为什么 问题答案: 我相信你正在寻找的查询功能,,,和。 但是要确切地说出您要尝
我正在使用moment.js格式化我的日期时间,这里我有两个日期值,当一个日期大于另一个时,我想实现一个特定的函数。我读了他们的大部分文档,但没有找到实现这一点的函数。我知道它会在那里。 这是我的代码: 编辑 在这里,我比较了两个日期,即,希望第一个日期大于第二个日期,但它总是转到else条件。我不知道为什么?
我有个约会‘2019-05-08t 22:15:00-0400’。我想将这个日期与当前的日期和时间进行比较。如果上述日期和时间小于当前日期和时间,那么我必须做些什么。 我的代码是:- 但它返回 false 。
问题内容: 我有 以下格式的两个对象。 现在,我想将上述两个日期与时间进行比较。我应该如何在Java中进行比较。 谢谢 问题答案: 自实现以来,它很容易: 按照合同规定,如果分别被认为小于/等于/大于/大于(例如,在此之前/之前/之后),它将返回一个负整数/零/正整数。 请注意,还有和方法将改为返回布尔值。
问题内容: 如何在Java中比较没有时间的日期? 此代码比较时间和日期! 问题答案: 尝试比较将时间更改为00:00:00的日期(使用此功能):