【问题标题】:Creating a table with arithmetic overflow error创建具有算术溢出错误的表
【发布时间】:2017-05-20 14:23:16
【问题描述】:

所以我正在制作一个表格,其属性中的数据类型为 char、decimal 和 date。我收到了一些算术溢出错误的结果。想知道您是否可以帮助我学习创建此表。谢谢:D

Create table JOB (JOB_CODE char (3), JOB_DESCRIPTION char(25), JOB_CHG_HOUR decimal (4,2), JOB_LAST_UPDATE date)

Insert into JOB (JOB_CODE, JOB_DESCRIPTION, JOB_CHG_HOUR , JOB_LAST_UPDATE )
Values (500, 'Progammer', 35.75, '26-Nov-09'),
(501, 'Systems Analyst', 96.75, '20-Nov-09'),
(502, 'Database Designer', 125.00, '24-Mar-10'),
(503, 'Electrical Engineer', 84.50, '20-Nov-09'),
(504, 'Mechanical Engineer', 67.90, '20-Nov-09'),
(505, 'Civil Engineer', 55.78, '20-Nov-09'),
(506, 'Clerical Support', 26.87, '20-Nov-09'),
(507, 'DSS Analyst', 45.95, '20-Nov-09'),
(508, 'Application Designer', 48.10, '24-Mar-10'),
(509, 'Bio Technician', 34.55, '20-Nov-09'),
(510, 'General Support', 18.36, '20-Nov-09')

这是确切的消息结果:

消息 8115,第 16 级,状态 8,第 1 行 将数字转换为数字数据类型的算术溢出错误。 声明已终止。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您的字段 JOB_CHG_HOUR 只能包含 4 位数字,带两位小数,因此最多为 99,99。您正在尝试插入包含 125,00 的行作为 JOB_CHG_HOUR 值。这就是为什么您溢出(超过容量)该字段的原因。考虑将您的 create 语句更改为:

    CREATE TABLE JOB
    (
        JOB_CODE CHAR(3), 
        JOB_DESCRIPTION CHAR(25), 
        JOB_CHG_HOUR DECIMAL(5,2), --will now hold up to 999,99
        JOB_LAST_UPDATE DATE
    );
    

    另外,根据您拥有的表创建语句,字段JOB_CODE 的类型为CHAR(3),因此您需要在插入语句中使用引号。

    INSERT INTO JOB (JOB_CODE, JOB_DESCRIPTION, JOB_CHG_HOUR , JOB_LAST_UPDATE)
    VALUES('500', 'Programmer', 35.75, '26-Nov-09');
    

    不要忘记语句末尾的分号;

    【讨论】:

    • 没问题! @RYREN
    【解决方案2】:

    JOB_CHG_HOURdecimal (4,2)

    来自文档:

    s(规模)

    将存储在小数点右侧的小数位数。这个数字从 p 中减去,以确定小数点左边的最大位数。

    因此,您最多只剩下 2 位数字,并且它不会接受 125.00

    【讨论】:

    • 我明白了,这就是为什么它告诉我我已经超过了,无论如何谢谢先生!
    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多