2016-05-16 56 views
0

我是SQL新手。我通过ETL导入了多个CSV文件。有一个日期列,有些日期格式为mm-dd-yyyy,另外一些日期格式为mm/dd/yyyy。我知道如何得到如下的日,月和年的个人部分。从varchar列的MySql中创建日期部分

#month 
SELECT mid(My_Date,1,2) as Month_ FROM rl_transactional.mydb; 
#day 
SELECT mid(My_Date,4,2) as Day_ FROM rl_transactional.mydb; 
#year 
SELECT mid(My_Date,7,4) as Year_ FROM rl_transactional.mydb; 

我想连接所有三个组件来获取日期。当我运行查询

select CAST(
    (SELECT mid(My_Date,7,4) FROM rl_transactional.mydb) + '-' 
    + (int, SELECT mid(My_Date,1,2) FROM rl_transactional.mydb) + '-' 
    + (int, SELECT mid(My_Date,4,2) FROM rl_transactional.mydb) 
AS DATETIME) 

它给了我错误

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int, SELECT mid(My_Date,1,2) FROM rl_transactional.mydb) + '-' + (int, SELECT mi' at line 1 

谢谢!

+1

你切断了你的错误信息,直到有趣的部分开始 –

+0

H @juergend我刚更新了这个。谢谢 – Enthusiast

回答

1

试试这个方法:

SELECT CAST(CONCAT(MID(My_Date,7,4) , '-' 
    , MID(My_Date,1,2) , '-' 
    , MID(My_Date,4,2)) 
AS DATETIME) 
FROM rl_transactional.mydb 
+0

感谢您的快速帮助。 + 1进行格式化。 – Enthusiast

+0

非常欢迎您! :-)祝你的项目好运! – Alex

1
select CAST(CONCAT(mid(My_Date,7,4) ,'-' , mid(My_Date,1,2) , '-' ,mid(My_Date,4,2)) AS DATETIME FROM rl_transactional.mydb 

更改您上面的查询。

注: 我更愿意使用MySQL

+0

你应该使用'str_to_date'。这是它的目的, –

+0

我想我使用了太多的选择语句。这是错误的原因。 – Enthusiast

1
  1. STR_TO_DATE功能在MySQL +运营商没有做字符串连接,你必须使用CONCAT()函数,该函数或完全忽略了运营商。

  2. 您只是从(int ...)部分丢失了转换函数名称。但是如果你把它转换回字符串,那么使用这个转换是多余的。

竟被我用下面的SQL:

SELECT CAST(CONCAT(mid(My_Date,7,4), '-', mid(My_Date,1,2), '-', mid(My_Date,4,2)) AS DATETIME) 
FROM rl_transactional.mydb 

但是你可以使用STR_TO_DATE()函数,而不是上面。

+0

感谢您的快速帮助! – Enthusiast