【问题标题】:Mysql Date Format convertMysql日期格式转换
【发布时间】:2014-07-26 09:16:09
【问题描述】:

我想从 [09/Jul/2014:16:12:58 +0530] 中获取子字符串日期,并希望将其提供给日期类型字段。 我的完整查询是这样的

    insert into SquidLog 
   (LocalIP,AccessDateTime,Url,HttpAccessCode,BytesAccessed,DestinationIP,
   SquidErrorCode,SquidTimeStamp,AccessDate,AccessTime) select LocalIP,
   AccessDateTime,Url,HttpAccessCode,BytesAccessed,DestinationIP,
   SquidErrorCode,SquidTimeStamp, 
   DATE_FORMAT(replace(SUBSTR(AccessDateTime,2,11),"/","-"),'%Y-%b-%d'), 
   SUBSTR(AccessDateTime,14,8) from SquidLogTemp;

这怎么可能。

【问题讨论】:

  • 您的代码建议您要接受多种格式的输入,真的是这样吗?
  • 日期不同字段,时间不同字段。
  • 好吧,没关系...
  • “日期必须在不同的领域,时间必须在不同的领域”有什么特别的原因吗?这可能是一个麻烦
  • 年和小时之间真的有冒号吗?

标签: mysql sql string date squid


【解决方案1】:

date_format(str_to_date(SUBSTR(AccessDateTime,2,11),'%d/%b/%Y'),'%Y-%b-%d')

    CREATE TABLE SquidLogTemp
        (`AccessDateTime` varchar(26))
    ;

    INSERT INTO SquidLogTemp
        (`AccessDateTime`)
    VALUES
        ('09/Jul/2014:16:12:58 +0530')
    ;

**Query 1**:

    select
           date_format(str_to_date(AccessDateTime,'%d/%b/%Y'),'%Y-%b-%d')
         , substring(AccessDateTime,13,8)
         , str_to_date(substring(AccessDateTime,13,8),'%H:%i:%s') 
    from SquidLogTemp



**[Results][2]**:

    | DATE_FORMAT(STR_TO_DATE(ACCESSDATETIME,'%D/%B/%Y'),'%Y-%B-%D') | SUBSTRING(ACCESSDATETIME,13,8) | STR_TO_DATE(SUBSTRING(ACCESSDATETIME,13,8),'%H:%I:%S') |
    |----------------------------------------------------------------|--------------------------------|--------------------------------------------------------|
    |                                                    2014-Jul-09 |                       16:12:58 |                         January, 01 1970 16:12:58+0000 |

http://sqlfiddle.com/#!9/a24ce/1

【讨论】:

  • 我添加了一个新字段并在其中插入日期。我将使用 str_to_date() 函数从那里选择它。
【解决方案2】:

试试这个:

插入 SquidLog (LocalIP,AccessDateTime,Url,HttpAccessCode,BytesAccessed,DestinationIP, SquidErrorCode,SquidTimeStamp,AccessDate,AccessTime) 选择 LocalIP, AccessDateTime,Url,HttpAccessCode,BytesAccessed,DestinationIP, SquidErrorCode,SquidTimeStamp, STR_TO_DATE(replace(SUBSTR(AccessDateTime,2,11),"/","-"),'%Y-%b-%d'), SUBSTR(AccessDateTime,14,8) 来自 SquidLogTemp;

【讨论】:

  • 看来你的字段不是日期时间类型使用 STR_TO_DATE 转换成字符串,然后解析一个你不会的子字符串:
猜你喜欢
  • 2011-08-13
  • 2014-02-25
  • 1970-01-01
  • 2014-09-05
  • 2017-12-17
  • 2017-08-15
  • 2013-12-15
  • 2011-10-11
  • 2016-11-04
相关资源
最近更新 更多