首页 > 解决方案 > 我无法将 data_type 从 TINYTEXT 更改为 DATE&/DATETIME

问题描述

我正在使用 SQL 8.0 并且仍在学习,并且我对其进行了一些很好的更改。现在我被日期困住了,它们在导入data_typeTINYTEXT,其他每个字段都是VARCHAR(60)INT为主键,我在这方面做得很好,但我被困data_type在日期上。

从第一天开始我就这样做了:它适用于date类型

SELECT *, DATE_FORMAT(column_name , "%d/%m/%Y %H:%i:%s")
FROM table_name; 

(对于一个日期时间它不起作用。)

现在我尝试了这个:

INSERT INTO database_test.table_test.field_name(today) 
VALUES(STR_TO_DATE('07-25-2012','%m-%d-%y') ) 

而不是%m-%d%y,我需要这种欧洲格式:%d/%m/%Y对于 DATE。而%d/%m/%Y %H:%i:%s对于我的DATETIME. 两者都在TINYTEXT。(注意:对于未来的“日期”数据类型,它们的日期是 1899 年到 2099 年。)

标签: phpsqldatedatetimedatetime-format

解决方案


我要做几个假设...

  1. SQL 8.0是指MySQL 8.0STR_TO_DATE非标准,因此可能无法与其他数据库服务器一起使用)
  2. TINYTEXT字段中的日期以格式存储%d/%m/%Y %H:%i:%s

...为了争论起见,我要说TINYTEXT日期字段被称为date_string.

我要做的是创建一个新DATE列,然后UPDATE使用来自的值date_string- 使用STR_TO_DATE函数(就像你尝试过的那样) - 如果成功删除原始列,并可能重命名新DATE列。


添加真实日期

我在date_date这里调用它。

ALTER TABLE `table_test` ADD `date_date` DATE NOT NULL AFTER `date_string`;


使用 TINYTEXT 字段中的值更新实际日期

(假设d/m/Y H:i:s格式)

UPDATE `table_test` SET `date_date` = STR_TO_DATE(`date_string`, '%d/%m/%Y %H:%i:%s');


只要您的列中的格式与函数中设置的格式匹配, 这应该可以工作。无论如何,您现在将在表中拥有原始日期和转换后的日期,因此您可以检查数据是否正常。TINYTEXTSTR_TO_DATE


推荐阅读