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

Posted

技术标签:

【中文标题】如何在 MySQL 中将字符串转换为日期?【英文标题】:How to convert a string to date in MySQL? 【发布时间】:2011-07-09 06:04:21 【问题描述】:

我有一个 string 列,它充当 date,我想选择它作为 DATE

有可能吗?

我的示例数据格式是:

month/day/year -> 12/31/2011

【问题讨论】:

【参考方案1】:

正如mysql Using a string column with date text as a date field 所说,您可以这样做

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

您可以通过这种方式处理各种日期/时间布局。请参考the format specifiers for the DATE_FORMAT() function,看看您可以在STR_TO_DATE()的第二个参数中放入什么。

【讨论】:

我认为应该是 INTERVAL 7 DAY 而不是 DAYS 我有一个类似“dd-mmm-yyyy”格式的字符列。如何查询“dd-mm-yyyy”格式?【参考方案2】:
STR_TO_DATE('12/31/2011', '%m/%d/%Y')

【讨论】:

什么是日期存储为 DD/MM/YYYY 格式,如 31/11/1015 ? @VipulHadiya 将日期格式字符串更改为 %d/%m/%Y 就像这样 STR_TO_DATE('31/11/1015', '%d/%m/%Y') 请记住,输出将采用 YYYY-MM-DD 格式作为 DATE 数据类型。 只有代码的答案在 *** 上的价值很低。请改进这个正确答案。【参考方案3】:

这是另外两个例子。

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

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

【讨论】:

【参考方案4】:

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html 使用上面的页面可以参考 MySQL 中的更多函数

SELECT  STR_TO_DATE(StringColumn, '%d-%b-%y')
FROM    table

比如说使用下面的查询来获取输出

SELECT STR_TO_DATE('23-feb-14', '%d-%b-%y') FROM table

对于字符串格式,请使用以下链接

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

【讨论】:

【参考方案5】:

下面说明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');

基于格式字符串'%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');

更多详情:Reference

【讨论】:

以上是关于如何在 MySQL 中将字符串转换为日期?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在Oracle中将时间戳转化为日期格式

无法在 MySQL 查询中将字符串转换为日期时间

VBA 如何将一列字符转成日期

在雅典娜中将具有时区偏移的字符串转换为日期时间

sql字符串转换成日期