Mysql 将字符串数据值转换为日期

Mysql 将字符串数据值转换为日期,mysql,string,date,format,Mysql,String,Date,Format,大家早上好 我目前有一个MySQL表,其中有3个日期字段(列),以这种格式20140101 YYYYmmdd作为字符串加载。我想将其转换为日期格式2014/01/01 YYYY/mm/dd。请提供一个简单的sql语法,将表格从字符串更改为日期格式,并更改列以显示类似2014/01/01的日期,而不是类似20140101的日期。多亏了所有的试试这个: date_format(str_to_date(datecolumn, '%Y%m%d'),'%Y/%m/%d') 如果您只想重新格式化VARCH

大家早上好

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

试试这个:

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

如果您只想重新格式化
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 
我们希望语句中有一些东西能够防止语句在无意中重新运行时再次“工作”。它不必是
字符长度
。我们可能需要检查该值是否已经包含斜杠字符
,并且t.mycol与“%/%”不一样。


但究竟为什么“日期”值存储在字符列中,而不是存储在为存储和处理日期值而定制的
date
datatype中

ALTER TABLE mytable MODIFY mycol DATE ... ;
(如果列定义为
非空
,有默认值,有注释,这些属性可以保留,它们需要包含在新的列规范中,例如

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
以该格式获取转换为日期数据类型的字符串值

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

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