MySQL - 将日期字符串更改为日期类型?
Posted
技术标签:
【中文标题】MySQL - 将日期字符串更改为日期类型?【英文标题】:MySQL - Change date string to date type in place? 【发布时间】:2009-09-10 23:38:54 【问题描述】:(大家好。我尤其是 SQL 和 mysql 的新手。我知道一些 php。)
我有一个包含“date_string”列的表。由于遗留原因,这是一个文本字段,包含 d/m/YY 格式的日期。例如2009 年 11 月 22 日的“22/11/09”。
问题:如何就地将此列中的所有字段转换为标准 MySQL 日期格式 (YYYY-mm-dd)?
或者,鉴于列类型是文本,无法就地更改它,我如何获取每个现有的基于文本的日期,并在另一列(“日期”类型)中创建标准日期桌子?
感谢您的帮助。
【问题讨论】:
【参考方案1】:您可能想使用STR_TO_DATE()
函数。
SELECT STR_TO_DATE(textdate, '%d/%m/%y') FROM MyTable...
或者使用DATE
数据类型创建另一列并复制值:
ALTER TABLE MyTable ADD COLUMN realdate DATE;
UPDATE MyTable SET realdate = STR_TO_DATE(textdate, '%d/%m/%y');
【讨论】:
感谢您的帮助!当我尝试任一选项时,我得到“NULL”作为所有字段的结果。具体来说,如果我这样做: SELECT STR_TO_DATE('%d/%m/%y', date_string) FROM myTable 然后我得到一个 NULL 值列表,每条记录一个。 "date_string" 是 varchar 类型,最多 32 个字符。日期当前存储为“19/3/05”、“1/8/07”等。 对不起,我的论点颠倒了。我将编辑上述示例以使其正确。【参考方案2】: UPDATE your_table
SET your_col = '20'
+ substring(your_col,
LOCATE('/', your_col, LOCATE('/', your_col) + 1) + 1
)
+ '-'
+ substring(your_col,
LOCATE('/', your_col) + 1,
LOCATE('/', your_col, LOCATE('/', your_col) + 1)
)
+ '-'
+ substring(your_col, 1, LOCATE('/', your_col) - 1)
/*
LOCATE('/', your_col) -> search for 1st occurence of '/' in your_col
LOCATE('/', your_col, LOCATE('/', your_col) + 1) -> search for 2nd occurence of '/' in your_col
LOCATE('/', your_col, LOCATE('/', your_col) + 1) + 1 -> from where to retriev the last part
*/
(我想年份 >= 2000)
【讨论】:
谢谢。是的,在这种情况下,年份始终 >= 2000。但是,字符串本身的长度是可变的,因为“1/1/01”已与“31/12/09”等日期一起记录。这两个日期都会在你的算法中存活下来吗?干杯。 第 1 版不适用于 '1/1/01'。修正。现在它适用于两者。【参考方案3】:如果您在 MySQL 中执行此操作时遇到问题,您可以通过使用 strtotime() 转换日期来尝试使用 php
【讨论】:
是的,这将是我的下一步。但是,Bill 编辑的示例现在可以工作了,因此保存了一个 PHP 作业。干杯。以上是关于MySQL - 将日期字符串更改为日期类型?的主要内容,如果未能解决你的问题,请参考以下文章