繁体   English   中英

如何在SQL中将字符串日期转换为日期时间类型

[英]How to convert string date to datetime type in SQL

我有旧的数据库,在那些表中,每个条目都维护create_at abd updated_at条目,

但是此条目采用varchar格式,例如: 24/04/2018 14:25:29 pm

如何将其转换为日期时间,以便可以进行查询并获取每个月的记录数。

查询将是这样的:

SELECT *
FROM table
WHERE MONTH(columnName) = MONTH(CURRENT_DATE())
AND YEAR(columnName) = YEAR(CURRENT_DATE())   

MySQL:

使用STR_TO_DATE函数转换为datetime

像这样:

SELECT *
FROM table
WHERE MONTH(STR_TO_DATE(columnName,'%d%m%Y')) = MONTH(STR_TO_DATE(columnName,'%d%m%Y'))
AND YEAR(STR_TO_DATE(columnName,'%d%m%Y')) = YEAR(STR_TO_DATE(columnName,'%d%m%Y')) 

演示:

http://sqlfiddle.com/#!9/94c4b/26

说明:

STR_TO_DATE

语法: STR_TO_DATE(str,format)

它采用字符串str和格式字符串格式。
如果格式字符串同时包含日期和时间部分,则STR_TO_DATE()返回DATETIME值;如果字符串仅包含日期或时间部分,则STR_TO_DATE()返回DATE或TIME值。
如果从str提取的日期,时间或日期时间值不合法,则STR_TO_DATE()返回NULL并产生警告。

格式说明符:

%d-每月的某天,数字(00..31)
%m-月,数字(00..12)
%Y-年,数字,四位数
%T-时间,24小时(hh:mm:ss)

链接到源:

https://dev.mysql.com/doc/refman/8.0/zh-CN/date-and-time-functions.html#function_str-to-date

https://dev.mysql.com/doc/refman/8.0/zh-CN/date-and-time-functions.html#function_date-format

只需使用substr()substring() (取决于您的数据库):

SELECT *
FROM table
WHERE substring(columnName, 4, 2) = MONTH(CURRENT_DATE()) AND
      substring(columnName, 7, 4) = YEAR(columnName);

然后,我强烈建议您更改日期/时间的格式。 确切的逻辑取决于数据库,但是通常可以执行以下操作:

update table
    set columnName = <convert columnname to date/time>;  -- converts to a date and then back to a string using "default" format

alter table <table> alter columnName datetime;  -- "datetime" is probably the appropriate type, but that depends on the database

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM