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 - 将日期字符串更改为日期类型?的主要内容,如果未能解决你的问题,请参考以下文章

无法将数据类型更改为日期

使用时刻 js 将 mysql 日期中的组 concat 更改为印度尼西亚日期格式

Pyspark 将列类型从日期更改为字符串

如何将字符串日期范围更改为开始和结束日期?

将字符串更改为日期的问题

如何在不更改现有组件文件的情况下通过插件将日期类型更改为下拉列表