【问题标题】:How to get the real date and not the actual如何获得真实日期而不是实际日期
【发布时间】:2017-11-22 16:33:01
【问题描述】:

我正在尝试实现这个查询:

SELECT 
    str_to_date(concat(Right(Born,2),"/", Mid(Born,6,2),"/",Left(Born,4)),'%d/%m/%y') as Born_Date,

    str_to_date(concat(Right(FirstTime,2),"/", Mid(FirstTime,6,2),"/",Left(FirstTime,4)),'%d/%m/%y') as First_Date

    FROM ItalianAthletes
    where Born is not null and char_length(born)=10
          and FirstTime is not null

我的数据库中有这样的日期格式(示例):22-07-1877。

但是代替这个日期我得到:2018-07-22

如何得到 1877 而不是 2018?

【问题讨论】:

  • 1877 年在 1970 年之前......对此有一个答案。 stackoverflow.com/questions/4466546/…
  • @Zak 那里的答案说 MySQL 已经正确地做到了,问题出在 PHP 上。但是这个问题没有PHP。
  • "真实日期而不是实际日期" -- 真实日期和实际日期有什么区别?
  • @Barmar 你说得对,我没有解释清楚,对于真实日期,我打算在我的数据库字段中拥有的日期,实际日期我打算现在的日期(即使它得到一个未来的日期)

标签: mysql date parsing


【解决方案1】:

您使用的是两位数年份的%y,您应该使用%Y。

此外,应该没有理由使用 LEFT()、RIGHT() 和 MID() 来完成所有这些工作。您可以在 STR_TO_DATE() 的格式字符串中使用破折号而不是斜杠。

mysql> set @born = '22-07-1877';

mysql> select str_to_date(@born, '%d-%m-%Y');
+--------------------------------+
| str_to_date(@born, '%d-%m-%Y') |
+--------------------------------+
| 1877-07-22                     |
+--------------------------------+

请考虑使用真实的 DATE 列,而不是使用 VARCHAR 作为您的日期。做日期算术、日期函数、排序、搜索等会更简单。

希望在您的表示层中将其格式化为 dd-mm-YYYY。

【讨论】:

  • 是的,我想使用真正的日期列,但在那个字段中我可能没有完整的日期,有时我也只有年和月,有时我可能只有年。所以我认为在查询中创建一个字符串到日期转换器可能会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多