MySQL:为什么日期对象总是显示“0”?

时间:2016-11-15 18:51:45

标签: mysql

我正在尝试使用日期格式的一列创建一个表。 以下是我这样做的代码:

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”,但它们都不起作用。 任何帮助表示赞赏!

1 个答案:

答案 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之后的任何数字或非常小的数字科学领域是有道理的,但在处理精确度很重要的货币时却很少。

更多信息:

工作SQL Fiddle