Mysql 如何获得真实日期而不是实际日期

Mysql 如何获得真实日期而不是实际日期,mysql,date,parsing,Mysql,Date,Parsing,我正在尝试实现此查询: 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 Ital

我正在尝试实现此查询:

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年?

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

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

请考虑使用实际日期栏,而不是使用VARCHAR作为日期。做日期运算、日期函数、排序、搜索等会更简单


更愿意将其格式化为演示层中的dd-mm-YYYY。

如果您使用的是两位数年份的
%y
,则应使用
%y

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

请考虑使用实际日期栏,而不是使用VARCHAR作为日期。做日期运算、日期函数、排序、搜索等会更简单


更愿意将其格式化为演示层中的dd-mm-YYYY。

1877在1970年之前。。。这是有答案的@Zak那里的答案是MySQL已经做得很好了,问题是PHP。但是这个问题没有PHP。“真实日期而不是实际日期”--真实日期和实际日期有什么区别?@Barmar你是对的,我没有解释好,对于真实日期,我打算在我的数据库字段中输入日期,实际日期,我打算当前日期(即使它得到未来日期)1877年是1970年之前。。。这是有答案的@Zak那里的答案是MySQL已经做得很好了,问题是PHP。但是这个问题没有PHP。“真实日期而不是实际日期”--真实日期和实际日期有什么区别?@Barmar你是对的,我没有解释好,对于真实日期,我打算用数据库字段中的日期,实际日期,我打算用现在的日期(即使它有未来的日期)是的,我想用真实日期列,但在那个领域,我不可能有一个完整的日期,有时我也只能有年和月,其他时候我只能有年。所以我认为最好在查询中创建一个字符串到日期的转换器。是的,我想使用一个真正的日期列,但在该字段中,我可能永远没有完整的日期,有时我也只能有年和月,其他时候我只能有年。所以我认为最好在查询中创建一个字符串到日期的转换器。
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                     |
+--------------------------------+