如何在 MySQL 中选择 DateTime.MinValue (01/01/1970)?

Posted

技术标签:

【中文标题】如何在 MySQL 中选择 DateTime.MinValue (01/01/1970)?【英文标题】:How to select DateTime.MinValue (01/01/1970) in MySQL? 【发布时间】:2015-05-21 15:02:54 【问题描述】:

如何在 mysql 中选择 1970 年 1 月 1 日?

在 C# 中使用 SELECT '1970-01-01' 不会返回有效的 DateTime 对象。

如果返回null,我希望它返回纪元日期,例如

SELECT      IFNULL(MAX(`created`), '1970-01-01') `lastcreated`
FROM        `tickets`
WHERE       `accnum` = 20088

【问题讨论】:

那么,您发布问题只是为了能够发布答案? @JohnBollinger 是的,这很平常。我搜索并找不到答案,因此将其添加到 SO 以防其他人将来想知道同样的事情。 @JohnBollinger:来自Can I answer my own question?,“如果您有一个您已经知道答案的问题,并且您想公开记录该知识,以便其他人(包括您自己)可以找到它稍后,您可以在 Stack Exchange 网站上提出和回答您自己的问题。To encourage people to do this,每次您提出问题时,页面底部都会有一个复选框。” 使用 epoch 作为魔术值来指示不存在显式值通常是不好的做法。为什么不在您的应用程序代码中处理NULL 案例? @DannyBeckett:好吧,我认为这仍然没有正确处理NULL 值,因为它再次使用了魔法值。为什么不简单地让this.LastTicket 成为null (然后根据需要正确处理显式值的缺少,例如向用户显示“没有以前的票”而不是“1970 年1 月1 日” )?但这与您的问题相差很远。至于“尽可能在 DB 层做”,我认为这是一个常见的错误——业务逻辑确实不属于数据库,是许多 DBA 生活的祸根。 【参考方案1】:

您可以使用SELECT FROM_UNIXTIME(0) 获取一个DateTime 对象,用于表示纪元后0 秒的日期:

SELECT      IFNULL(MAX(`created`), FROM_UNIXTIME(0)) `lastcreated`
FROM        `tickets`
WHERE       `accnum` = 20088

【讨论】:

我得到'1969-12-31 16:00:00'(因为我在加利福尼亚)。

以上是关于如何在 MySQL 中选择 DateTime.MinValue (01/01/1970)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 中同时更新和选择

如何在 MySQL 表中选择特定范围的值?

如何在 MySQL 中选择 DateTime.MinValue (01/01/1970)?

如何在mysql中选择前三行

如何在 MySQL 中选择最新的行?

在mysql中,如果表存在,如何避免选择