SQL:利用STR_TO_DATE(string, format_mask)将文本型数据更改为日期型数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL:利用STR_TO_DATE(string, format_mask)将文本型数据更改为日期型数据相关的知识,希望对你有一定的参考价值。

参考技术A 函数介绍:STR_TO_DATE(string, format_mask),将文本转换成日期型。

string:对应的文本数据,如“1/1/2017 0:00”;“August 10 2017”;“‘20140422154706’”

format_mask:是根据前面的文本数据(string),输入对应的文本数据格式;

下面举出相关例子:

SELECT STR_TO_DATE('1/1/2017 0:00','%c/%d/%Y %H:%i');

运行结果:2017-01-01 00:00:00

SELECT STR_TO_DATE('1-1-2017 02:00','%c-%d-%Y %H:%i');

运行结果:2017-01-01 02:00:00

SELECT STR_TO_DATE('112017 02:00','%c%d%Y %H:%i');

运行结果:2017-11-20 02:00:00

SELECT STR_TO_DATE('August 10 2017','%M %d %Y');

运行结果:2017-08-10

从上面的例子我们看出,这个函数还是比较简单的,唯一要做的就是对对应的string写出对应的匹配表达式就好了。

注意:

在面对不同的string文本的时候,需要使用不同的表达方式。

如月份是:August,则只能用 %M来匹配;当月份是数字时可以用%c或%m来匹配;

如小时是:24小时计时时只能用%H或者%k,12小时计时则需要用%h;

等等...以后有再用到的会再补充上。

SQL 中使用 STR_TO_DATE 的日期转换查询

【中文标题】SQL 中使用 STR_TO_DATE 的日期转换查询【英文标题】:Date conversion query in SQL using STR_TO_DATE 【发布时间】:2021-12-29 01:58:11 【问题描述】:

在我的表格中,有一个日期列,即 ORDER DATE,格式为 dd-mm-yyyy,该日期列的数据类型为文本。现在,我想从 yyyy-mm-dd 转换格式。但是日期格式根本没有改变。尝试使用 STR_TO_DATE 但日期中的年份仅为 2020 年。不知道如何修复它,或者是否有更好的方法来转换 MySQL 中的日期。

例如:

SELECT STR_TO_DATE('14-09-2017','%d-%m-%y') AS DATE;
Result coming as 2020-09-14

或者假设

SELECT STR_TO_DATE('20-MAR-2018','%d-%b-%y') AS DATE;
Result coming as 2020-03-20

日期和月份正常到来,但年份没有到来。请帮助如何正确转换日期格式。

【问题讨论】:

检查 documentation %Y 的四位数年份 "此日期列的数据类型是文本。" - 从不将日期值存储为字符串。 【参考方案1】:

尝试像下面这样更改您的命令,您将得到答案: SELECT STR_TO_DATE('14-09-2017','%d-%m-%Y') AS DATE;

有关命令的更多信息,请参阅documentation。

【讨论】:

感谢已解决的帮助问题。有什么办法可以更改此日期“14-09-2017”的数据类型,它是文本类型,格式类似于 dd-mm-yyyy?如果它在那里,那么我将更改该日期列的数据类型并将其用作日期列。

以上是关于SQL:利用STR_TO_DATE(string, format_mask)将文本型数据更改为日期型数据的主要内容,如果未能解决你的问题,请参考以下文章

sql中将字符串和时间格式的互相转换:date_format()str_to_date()

sql中将字符串和时间格式的互相转换:date_format()str_to_date()

MySQL STR_TO_DATE NULL 错误

使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确

SQL中两个日期的查询语句怎么写?

我:正在尝试使用 STR_TO_DATE 但为啥返回 null?