如何在MySQL中将字符串转换为日期?

179

我有一个字符串列,它的作用是表示日期,我想将其选择为一个DATE

这是可能的吗?

我的样本数据格式如下:

月/日/年 -> 12/31/2011

5个回答

307

正如在MySQL使用字符串列作为日期字段中所述,您可以这样做

SELECT  STR_TO_DATE(yourdatefield, '%m/%d/%Y')
FROM    yourtable

您也可以在WHERE子句中处理这些日期字符串。例如:

SELECT whatever
  FROM yourtable
 WHERE STR_TO_DATE(yourdatefield, '%m/%d/%Y') > CURDATE() - INTERVAL 7 DAY

您可以通过这种方式处理各种日期/时间格式。请参考DATE_FORMAT()函数的格式说明符,以查看您可以在STR_TO_DATE()函数的第二个参数中使用什么。


8
我认为应该使用“INTERVAL 7 DAY”而不是“DAYS”。 - Feras Odeh
1
我有一个字符列,格式为“dd-mmm-yyyy”。如何将其查询为“dd-mm-yyyy”格式? - MAX
如果格式是2023年6月16日下午2点,怎么样?在我的情况下不起作用... - user20476491

61
STR_TO_DATE('12/31/2011', '%m/%d/%Y')

存储日期的格式是DD/MM/YYYY,例如31/11/1015? - Vipul Hadiya
3
将日期格式字符串更改为%d/%m/%Y,如此编写代码 STR_TO_DATE('31/11/1015', '%d/%m/%Y')。请记住输出将以YYYY-MM-DD格式作为DATE数据类型。 - Will B.
1
仅提供代码的答案在StackOverflow上价值不高。请改进这个正确的答案。 - mickmackusa

18

以下有两个例子。

要输出日期、月份和年份,可以使用:

select STR_TO_DATE('14/02/2015', '%d/%m/%Y');

这将产生:

2015年02月14日

如果要同时输出时间,您可以使用:

select STR_TO_DATE('14/02/2017 23:38:12', '%d/%m/%Y %T');

这会产生:

2017年02月14日23时38分12秒


12

7
以下是STR_TO_DATE()函数的语法示例:
STR_TO_DATE(str,fmt);
STR_TO_DATE()函数将字符串str根据格式字符串fmt转换为日期值。基于输入和格式字符串,STR_TO_DATE()函数可能返回DATETIMEDATETIME值。如果输入字符串不合法,则STR_TO_DATE()函数返回NULL。
以下语句将字符串转换为DATE值。
SELECT STR_TO_DATE('21,5,2013','%d,%m,%Y');

enter image description here

基于格式字符串“%d,%m,%Y”,STR_TO_DATE()函数扫描输入字符串“21,5,2013”。
  • 首先,它尝试在输入字符串中查找% d格式说明符(01…31),这是一个月中的一天。因为数字21与%d说明符匹配,所以函数将21作为日期值。
  • 其次,因为格式字符串中的逗号(,)字面字符与输入字符串中的逗号匹配,函数继续检查第二个格式说明符%m,它是一个月份(01…12),并发现数字5与%m格式说明符匹配。它将数字5作为月份值。
  • 第三,在匹配第二个逗号(,)后,STR_TO_DATE()函数继续查找第三个格式说明符%Y,它是四位数的年份,例如2012年,2013年等,并将数字2013作为年份值。
STR_TO_DATE() 函数在解析输入字符串时,会根据格式字符串忽略输入字符串末尾的额外字符。以下是一个示例:
SELECT STR_TO_DATE('21,5,2013 extra characters','%d,%m,%Y');

enter image description here

更多细节:参考


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接