【问题标题】:How do I convert month name in string to short month如何将字符串中的月份名称转换为短月份
【发布时间】:2018-08-23 15:51:38
【问题描述】:

我正在尝试将 csv 文件加载到我的数据库中,并且需要调用一个函数,将当前为 dd-mmm-yyyy 格式的日期字符串转换为 yyyy/mm/dd 格式。

我试过了,但它不起作用:

SELECT STR_TO_DATE("10-Aug-2017", "%M %d %Y");

【问题讨论】:

  • 您使用哪种语言解析 csv 文件?
  • 您能显示您当前使用的代码吗?这可能不是 MySQL 的事情,而是您使用的语言中的事情。
  • 我正在使用 LOAD DATA INFILE sql 语句将 csv 数据集上传到 mysql 数据库中。我知道我可以在我的数据库上调用用户定义的函数作为此过程的一部分,但我需要一个将现有字符串转换为有效日期格式的函数。所以这一切都是在 MYSQL(使用 mysql 工作台)中完成的,而不是例如 php 脚本

标签: mysql date


【解决方案1】:

对于 mysql,你可以使用 str_to_date() 来转换日期中的字符串

    select str_to_date('23-08-2018', 'd%-m%-%Y') 
    from dual  

那么你有一个正确的日期值

您可以使用日期格式显示日期值

   select date_format( my_col_date, '%Y/%m/%d')
   from dual 


   select date_format(str_to_date('23-08-2018', 'd%-m%-%Y'), '%Y/%m/%d')
   from dual 

你的情况

   select date_format(STR_TO_DATE("12-Aug-2017", "%d-%b-%Y"), '%Y/%m/%d')
   from dual 

请参阅此参考以获取掩码参数https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

假设您的插入表包含 col1, col2, col3, .... col4 和 col1 si 列用于日期值 对于加载 infile,您应该将日期转换为

    LOAD DATA INFILE '/path/to/your_file.csv'
    IGNORE INTO TABLE temp_test
      FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
      LINES TERMINATED BY '\r\n' #use '\n' for linux
      IGNORE 1 LINES
    (@var_col1, col2, col3, ......, coln)
    SET col1 = STR_TO_DATE(@var_col1,'%d-%m-%Y');

【讨论】:

  • 谢谢我已经编辑了我的问题。我已经尝试了 str_to_date 函数,但对我不起作用
  • 什么意思不起作用?你有错误..显示错误消息..错误结果显示actula结果和预期结果..
  • answer update ... 选择用于查询而不是 LOAD INFILE .. 我也对 INFILE 有意见
【解决方案2】:

抱歉...我误解了函数。它现在正在工作:

SELECT STR_TO_DATE("12-Aug-2017", "%d-%b-%Y");

返回 2017-08-12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多