我正在尝试使用日期格式的一列创建一个表。 以下是我这样做的代码:
CREATE TABLE Sales
(`CustomerID` int, `mydate` date, `amount` float(2))
;
INSERT INTO Sales
(customerID, mydate, amount)
VALUES
(10, 8/2/96, 2540.78),
(20, 1/30/99, 1800.54),
(30,7/14/95, 460.33),
(10, 6/29/98,2400),
(50, 2/3/98, 600.28),
(60, 3/2/98, 720),
(10, 7/6/98, 150)
;
但我的结果总是:
10|0|2540.78
20|0|1800.54
30|0|460.33
10|0|2400.0
50|0|600.28
60|0|720.0
10|0|150.0
所以基本上日期栏只显示0.
我正在使用这个在线IDE来帮助我执行此代码(它是一个执行MySQL的在线IDE我相信):https://www.tutorialspoint.com/execute_sql_online.php
我尝试将数据类型更改为“timestamp”或“datetime”,但它们都不起作用。 任何帮助表示赞赏!
答案 0 :(得分:4)
使用正确的mySQL日期格式,它应该可以工作..
http://dev.mysql.com/doc/refman/5.7/en/datetime.html
” ... DATE类型用于具有日期部分但没有时间部分的值。 MySQL以'YYYY-MM-DD'格式检索并显示DATE值。支持的范围是'1000-01-01'到'9999-12-31'....“
INSERT INTO Sales
(customerID, mydate, amount)
VALUES
(10, '1996-8-2', 2540.78),
(20, '1999-1-30', 1800.54),
(30, '1995-7-14', 460.33),
(10, '1998-6-29', 2400),
(50, '1998-2-3', 600.28),
(60, '1998-3-2', 720),
(10, '1998-7-6', 150)
另外, 不会将金额(货币)存储为浮动 。任何你想要一个SPECIFIC小数位数,并且没有浮点数学错误的东西,都需要存储为NUMERIC或DECIMAL,具有比例和精度。因此,而不是amount float(2)
使用amount numeric(10,2)
(将10设置为计划的小数左边的最大值,然后添加5是我的规则。(3因为小数增长2(如果你增加更多)需要更多精度)假设允许小数点前8位和2位小数。
简单地说: 如果您想要保留小数点的特定值,则在任何时候使用浮点数或双数据类型都会在以后遇到麻烦。
考虑使用float和double数据类型,当精度无关紧要时,如6.22 * 10 ^ 23(avagadro's number)之类的大数字通常不关心6.22之后的任何数字或非常小的数字科学领域是有道理的,但在处理精确度很重要的货币时却很少。
更多信息: