【问题标题】:Converting String Data Value into date将字符串数据值转换为日期
【发布时间】:2015-06-01 15:50:53
【问题描述】:

大家早上好;

我目前有一个 MySQL 表,其中有 3 个日期字段(列)作为字符串加载,格式为 20140101 YYYYmmdd。我想将其转换为日期格式 2014/01/01 YYYY/mm/dd。有人可以提供一个简单的 sql 语法,将表格从字符串更改为日期格式,并更改列以显示日期,如 2014/01/01 而不是 20140101。感谢所有

【问题讨论】:

  • MySQL 提供了一种数据类型DATE,专门用于存储和操作“日期”值。 DATE 列本身没有“格式”,但 MySQL 对日期字符串文字使用默认格式 YYYY-mm-dd,并且在将 DATE 转换为/从 VARCHAR 转换时。 MySQL 提供函数FORMAT_DATESTR_TO_DATEDATEVARCHAR 之间进行转换,您可以使用多种格式的字符串值,只需提供适当的格式说明符,例如'%Y/%m/%d'。您是要保留列 VARCHAR 并仅更改列的内容,还是要将列转换为 DATE

标签: mysql string date format


【解决方案1】:

试试这个:

date_format(str_to_date(datecolumn, '%Y%m%d'),'%Y/%m/%d')

【讨论】:

    【解决方案2】:

    如果您只想重新格式化 VARCHAR 列中的值,假设该列具有足够的长度,例如VARCHAR(10),所有的值都是八个字符的长度...

    你可以这样做:

    UPDATE mytable t
       SET t.mycol = CONCAT( LEFT( t.mycol ,4)
                           , '/'
                           , SUBSTR( t.mycol ,5,2)
                           ,'/'
                           , SUBSTR( t.mycol ,7,2)
                          ) 
     WHERE CHAR_LENGTH(t.mycol) = 8 
    

    我们希望语句中的某些内容可以防止语句再次“工作”,如果它无意中重新运行。它不一定是CHAR_LENGTH。我们可能希望检查该值是否已包含斜线字符AND t.mycol NOT LIKE '%/%'


    但是到底为什么将“日期”值存储在字符列中,而不是存储在为存储和处理日期值而定制的 DATE 数据类型中?

    ALTER TABLE mytable MODIFY mycol DATE ... ;
    

    (如果列定义为NOT NULL,有默认值,有注释,这些属性可以保留,需要包含在新的列规范中,例如

    ALTER TABLE mytable MODIFY mycol DATE NOT NULL COMMENT 'creation date';
    

    请注意,DATE 列本身没有“格式”。转换为字符串时,MySQL 使用日期格式'%Y-%m-%d'。 MySQL 期望表示日期值的字符串文字采用相同的格式。从DATE 列中获取值,转换为'yyyy/mm/dd' 格式的字符串。

      SELECT DATE_FORMAT(date_col,'%Y/%m/%d') AS date_col
    

    获取转换为 DATE 数据类型的格式的字符串值

     SELECT STR_TO_DATE('2015/06/01','%Y/%m/%d')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多