我正在尝试实施此查询:
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年?
答案 0 :(得分:3)
您使用的是%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。