CREATE TABLE ORDERS (
ORD_NUM NUMERIC(6,0) NOT NULL PRIMARY KEY,
ORD_AMOUNT NUMERIC(12,2) NOT NULL,
ORD_DATE DATE NOT NULL,
INSERT INTO ORDERS VALUES('200100', '1000.00', '08/01/2008');
INSERT INTO ORDERS VALUES('200110', '3000.00', '04/15/2008');
INSERT INTO ORDERS VALUES('200107', '4500.00', '08/30/2008');
由于我有大量的行具有上述格式的日期,我如何将转换为yyyy-mm-dd
?
下面的解决方案不起作用,因为值没有插入到ORDERS表中。因此,没有要更新的内容。
UPDATE ORDERS
SET ORD_DATE = DATE_FORMAT(ORD_DATE, '%Y-%m-%d');
执行代码会出现错误,我了解到这是由于MySQL不允许的日期格式。
2条答案
按热度按时间gojuced71#
这个问题误解了日期在SQL中的工作方式。
Date
类型根本没有任何人类可读的格式。此列中的值将存储为 binary data,这在内存/存储使用、日期数学和索引方面比字符串格式有显著的优势。现在我们在日期列中插入一个类似
'08/01/2008'
的值,我将根据问题中的其他值将其解释为8月1日(* 这不是一个通用的或多数人的解释!),该值首先提供月份,然后是日期,然后是年份... * 但MySQL不会以这种方式存储它,也不会保留原始格式。因此,通过
UPDATE
列来设置特定的格式是毫无意义的。* 您不能这样做 *,因为日期的存储方式不保留任何可写格式。您可以在
SELECT
查询的输出时间设置值的格式,以使用所需的任何格式。此外,您可以使用Str_To_Date()
函数控制在创建或与本机SQL日期比较时如何解释字符串值。有一点要记住:由于文化/国际化问题,在计算机上将日期(和数字!)与字符串相互转换比您预期的要慢得多,而且更容易出错。2这是要避免的。3因此,尽早转换为本地日期格式,并尽可能长时间地保持这种状态,通常是最好的选择。
k5hmc34c2#
您只需要在insert语句中将字符串转换为日期: