mysql 如何以YYYY-MM-DD'格式在新表格中插入日期?

kjthegm6  于 2023-02-18  发布在  Mysql
关注(0)|答案(2)|浏览(140)
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不允许的日期格式。

gojuced7

gojuced71#

这个问题误解了日期在SQL中的工作方式。Date类型根本没有任何人类可读的格式。此列中的值将存储为 binary data,这在内存/存储使用、日期数学和索引方面比字符串格式有显著的优势。
现在我们在日期列中插入一个类似'08/01/2008'的值,我将根据问题中的其他值将其解释为8月1日(* 这不是一个通用的或多数人的解释!),该值首先提供月份,然后是日期,然后是年份... * 但MySQL不会以这种方式存储它,也不会保留原始格式。
因此,通过UPDATE列来设置特定的格式是毫无意义的。* 您不能这样做 *,因为日期的存储方式不保留任何可写格式。
您可以在SELECT查询的输出时间设置值的格式,以使用所需的任何格式。此外,您可以使用Str_To_Date()函数控制在创建或与本机SQL日期比较时如何解释字符串值。
有一点要记住:由于文化/国际化问题,在计算机上将日期(和数字!)与字符串相互转换比您预期的要慢得多,而且更容易出错。2这是要避免的。3因此,尽早转换为本地日期格式,并尽可能长时间地保持这种状态,通常是最好的选择。

k5hmc34c

k5hmc34c2#

您只需要在insert语句中将字符串转换为日期:

INSERT INTO ORDERS VALUES('200100', '1000.00', TO_DATE('08/01/2008', 'mm/dd/yyyy');

相关问题