MYSQL:如何将包含日期的 VARCHAR 列转换为 DATE 列?

标签 mysql date varchar

我有一个很大的生日表,我想将其从 varchar 列转换为日期列。

表SQL是:

CREATE TABLE `birthdays` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `uid` bigint(20) DEFAULT NULL,
  `birthday_date` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM

生日日期以两种方式之一存储:像“05/26/1994”或有时“03/14”这样的字符串(对于不想透露出生年份的人)。

创建另一个表并将生日存储在日期列中的最佳方法是什么?是否可以仅使用 MySQL(并避免使用 PHP 或其他中介)来完成此操作? p>

我在 MySQL 中找到了一个 STR_TO_DATE 函数。我应该使用它吗?

谢谢!

最佳答案

SELECT IF(birthday_date RLIKE '[0-9]{2}/[0-9]{2}/[0-9]{4}',STR_TO_DATE(birthday_date,'%m/%d/%Y'),STR_TO_DATE(birthday_date,'%m/%d'));

对于没有输入年份的行,这将导致类似 0000-03-14 的日期。您的服务器需要配置为允许无效日期(参见 http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html )

关于MYSQL:如何将包含日期的 VARCHAR 列转换为 DATE 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223971/

相关文章:

MySQL - 从表中获取日期列

sql - varbinary 到 varchar w/o master.dbo.fn_varbintohexstr

c# - 处理选择不存在的记录以避免空异常错误的更奇特的方法

派生表中的 MySQL 联合 (related_id=a AND related_id=b) OR (related_id=z)

mysql - 当日期存储为 unix 时间戳时,如何计算 1967 年 9 月 3 日美国东部时间出生的人数?

php - 如何在 PHP 中将时间从 AM/PM 转换为 24 小时格式?

mysql - 嵌套 JOIN 遇到问题

python - Django - 列中的空值违反了 Django Admin 中的非空约束

php - sql server 存储过程使用 varchar max 作为参数

postgresql - 防止 CHARACTER VARYING 字段中出现空字符串