在MySQL中将varchar数据类型转换为datetime

时间:2016-09-23 04:20:26

标签: mysql sql

如何将varchar(30)数据类型的数据库中的时间转换为datetime,我有一个示例11:45:24 09/23/2016,假设必须将其转换为2016-9-23 11:45:24。我的专栏名称为due_by。我有搜索并尝试了不同的建议,但似乎没有一个成功或正确查询。我在MySQL工作台上运行它。

示例代码

SELECT convert(varchar(30),'yyyy-mm-dd hh:mm:ss', 120) 
FROM csbrms.user_request;

enter image description here

只是希望我的due_by格式等于Now()列的格式。

3 个答案:

答案 0 :(得分:0)

我认为我们无法直接将其转换为现在格式,因为它可以在Sql Server中使用,所以我试过这个,如果你没问题,请看看。

MySQL的:

 SELECT 
CONCAT(STR_TO_DATE(
        RIGHT(TRIM(due_by), 10), '%m/%d/%Y'), ' ', 
        STR_TO_DATE(due_by,'%h:%i:%s')) nowFormat 
FROM csbrms.user_request;

SQL Server:

SELECT CONVERT(DATETIME, '11:45:24 09/23/2016', 120)

答案 1 :(得分:0)

使用以下内容:

DECLARE @Date varchar(8)
set @Date='10102016'
SELECT CONVERT(datetime,RIGHT(@Date,4)+LEFT(@Date,2)+SUBSTRING(@Date,3,2))

输出:

-----------------------
2016-10-10 00:00:00.000

(1 row(s) affected)

将以下内容用于MySQL:

SELECT STR_TO_DATE('11:44:00 10/10/2016', '%h:%m:%s %m/%d/%Y') 

答案 2 :(得分:0)

 STR_TO_DATE(str,format)

这是DATE_FORMAT()函数的反转。它采用字符串str和格式字符串格式。如果格式字符串包含日期和时间部分,则STR_TO_DATE()返回DATETIME值;如果字符串仅包含日期或时间部分,则返回DATE或TIME值。如果从str中提取的日期,时间或日期时间值是非法的,STR_TO_DATE()将返回NULL并产生警告。

服务器扫描str尝试匹配格式。格式字符串可以包含以%开头的文字字符和格式说明符。格式中的文字字符必须在字面上与str匹配。格式中的格式说明符必须与str中的日期或时间部分匹配。有关可以在格式中使用的说明符,请参阅DATE_FORMAT()函数说明。

mysql> SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y');

        -> '2013-05-01'

mysql> SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y');

        -> '2013-05-01'

扫描在str开始时开始,如果发现格式不匹配则失败。 str末尾的额外字符将被忽略。

mysql> SELECT STR_TO_DATE('a09:30:17','a%h:%i:%s');
        -> '09:30:17'
mysql> SELECT STR_TO_DATE('a09:30:17','%h:%i:%s');
        -> NULL
mysql> SELECT STR_TO_DATE('09:30:17a','%h:%i:%s');
        -> '09:30:17'

未指定的日期或时间部分的值为0,因此str中未完全指定的值会产生一些或所有部分设置为0的结果:

mysql> SELECT STR_TO_DATE('abc','abc');

        -> '0000-00-00'

mysql> SELECT STR_TO_DATE('9','%m');

        -> '0000-09-00'

mysql> SELECT STR_TO_DATE('9','%s');

        -> '00:00:09'

对日期值部分的范围检查如第11.3.1节“DATE,DATETIME和TIMESTAMP类型”中所述。这意味着,例如,除非将SQL模式设置为禁止此类值,否则允许部分值为0的“零”日期或日期。

mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y');

        -> '0000-00-00'

mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');

        -> '2004-04-31'

如果启用了NO_ZERO_DATE或NO_ZERO_IN_DATE SQL模式,则不允许零日期或部分日期。在这种情况下,STR_TO_DATE()返回NULL并生成警告。

注意: -

您不能使用格式“%X%V”将年 - 周字符串转换为日期,因为如果周超过月边界,则年和周的组合不能唯一地标识年和月。要将年周转换为日期,您还应指定工作日:

mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W');

        -> '2004-10-18'