2016-05-16 60 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