【问题标题】:create date in MySql from a varchar column parts从 varchar 列部分在 MySql 中创建日期
【发布时间】:2016-09-12 06:27:54
【问题描述】:

我是 SQL 新手。我通过 ETL 导入了多个 CSV 文件。有一个日期列,一些日期格式为 mm-dd-yyyy,另一些日期格式为 mm/dd/yyyy。我知道如何获取日、月和年的各个部分,如下所示。

#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

谢谢!

【问题讨论】:

  • 你在有趣的部分开始的地方切断了你的错误信息
  • H @juergend 我刚刚更新了这个。谢谢

标签: mysql date


【解决方案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

【讨论】:

    【解决方案2】:
    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 的STR_TO_DATE 函数

    【讨论】:

    • 应该使用str_to_date。这就是它的设计目的,
    • 我猜我使用了太多的选择语句。这就是出错的原因。
    【解决方案3】:
    1. 在 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() 函数代替上述函数。

    【讨论】:

    • 感谢您的快速帮助!!
    猜你喜欢
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多