如何在 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)?的主要内容,如果未能解决你的问题,请参考以下文章