简体   繁体   English

插入数据时将数据类型varchar转换为数值时出错

[英]Error converting data type varchar to numeric while inserting data

I have a problem with my first insert statement. 我的第一个insert语句有问题。 I have searched online and nothing seems to help my understanding of this problem or how to fix it. 我已经在网上进行搜索,但似乎没有任何帮助对这个问题或如何解决的理解。 When I execute the insert statement it gives me the message: 当我执行insert语句时,它会给我消息:

Error converting data type varchar to numeric. 将数据类型varchar转换为数字时出错。

Table structure: 表结构:

CREATE TABLE BOOKS
(
    ISBN             INT            NOT NULL  UNIQUE,
    TITLE            VARCHAR(25)    NOT NULL,
    AuthorFname      VARCHAR(20)    NOT NULL,
    AuthorLname      VARCHAR(20)    NOT NULL,
    GENRE            VARCHAR(10)    NOT NULL,
    PUBLISHER        VARCHAR(30)    NOT NULL,
    PUBLISHERDATE    DATE           NOT NULL,
    DESCRIPTION      VARCHAR(300)   NOT NULL,
    EDITION          varchar(100)   NOT NULL,
    FORMAT           VARCHAR(20)    NOT NULL,
    PAGENUMBER       INTEGER        NOT NULL,
    FILESIZE         TEXT           NOT NULL,
    IMAGE            varchar(20)    NOT NULL,
    THUMBNAIL        varchar(20)    NOT NULL,
    PRICE            DECIMAL(9,2)   NOT NULL,
    AVAILABILITY     VARCHAR(20)    NOT NULL,

    PRIMARY KEY(ISBN),
    FOREIGN KEY(TITLE) REFERENCES WISHLIST(TITLE)
)

CREATE TABLE USERINFORMATION
(
    USEREMAIL        VARCHAR(30)    NOT NULL UNIQUE,
    USERNAME         VARCHAR(30)    NOT NULL,
    PASSWORD         TEXT           NOT NULL,
    QUESTION1        TEXT           NOT NULL,
    QUESTION2        TEXT           NOT NULL,
    ANSWER1          VARCHAR(25)    NOT NULL,
    ANSWER2          VARCHAR(25)    NOT NULL,
    BIRTHDATE        DATE           NOT NULL,
    TITLE            VARCHAR(25)    NOT NULL,

    PRIMARY KEY(USEREMAIL),
    FOREIGN KEY(USERNAME) REFERENCES REVIEWS(USERNAME)
)

CREATE TABLE BILLINGINFO
(
    FIRSTNAME        VARCHAR(20)    NOT NULL UNIQUE,
    LASTNAME         VARCHAR(20)    NOT NULL,
    USERNAME         VARCHAR(20)    NOT NULL,
    ADDRESS1         VARCHAR(35)    NOT NULL,
    ADDRESS2         VARCHAR(35)    NOT NULL,
    CITY             VARCHAR(25)    NOT NULL,
    STATE            VARCHAR(35)    NOT NULL,
    ZIP              INTEGER        NOT NULL,
    PHONE            INTEGER        NOT NULL,
    PAYMENTTYPE      TEXT           NOT NULL,
    CARDNUMBER       INTEGER        NOT NULL,
    SECURITYCODE     INTEGER        NOT NULL,
    EXPIRATIONDATE   DATE           NOT NULL,

    PRIMARY KEY(FIRSTNAME)
)

CREATE TABLE LENDINGHISTORY
(
    TITLE            VARCHAR(25)    NOT NULL UNIQUE,
    CHECKUOTDATE     DATE           NOT NULL,
    DUEDATE          DATE           NOT NULL,
    STATUS           TEXT           NOT NULL,
    USERNAME         VARCHAR(20)    NOT NULL,
    RETURNEDDATE     DATE           NOT NULL,

    PRIMARY KEY(TITLE)
)

CREATE TABLE WISHLIST
(
    TITLE            VARCHAR(25)    NOT NULL UNIQUE,
    AUTHORFNAME      TEXT           NOT NULL,
    AUTHORLNAME      TEXT           NOT NULL,
    THUMBNAIL        VARCHAR(20)    NOT NULL,
    GENRE            VARCHAR(10)    NOT NULL,
    PRICE            DECIMAL(9,2)   NOT NULL,

    PRIMARY KEY(TITLE)
)

CREATE TABLE REVIEWS
(
    USERNAME         VARCHAR(30)    NOT NULL UNIQUE,
    REVIEWTEXT       VARCHAR(40)    NOT NULL,
    RATING           INT            NOT NULL,
    TITLE            VARCHAR(25)    NOT NULL,

    PRIMARY KEY(USERNAME)
)

ALTER TABLE REVIEWS
ADD FOREIGN KEY(TITLE)
REFERENCES WISHLIST(TITLE)

INSERT INTO BOOKS
VALUES ('0547928220', 'The Hobbit', 'J.J.R.', 'Tolkien', 'Fantasy', 'Houghton Mifflin Harcourt', '9-18-2012', 
        '"In a hole in the ground, there lived a hobbit." So begins one of the most beloved and delightful tales in the English language. Set in the imaginary world of Middle-earth, at once a classic myth and a modern fairy tale, The Hobbit is one of literature s most enduring and well-loved novels.',
        '75Th Anniversary Edition', 'PaperBack', '320', 'N/A', 'the_Hobbit', 'the_Hobbit2', '$8.30', 'Available');

SELECT *
FROM BOOKS 

I think there are a few different things going on here. 我认为这里发生了一些不同的事情。 First of all, you have a line that reads drop TABLE BOOKS before the insert, which will remove the table from the registry before you can add any rows to it. 首先,您有一行在插入之前读取drop TABLE BOOKS的信息,这将在您向其中添加任何行之前从注册表中删除该表。

Secondly, the numerics you're trying to insert are surrounded by quotes and SQL doesn't do very well with implicit conversions to begin with. 其次,您要插入的数字用引号引起来,而SQL对于以隐式转换开始的情况并不是很好。 Your ISBN should probably be a VARCHAR since it contains a leading 0, which will be dropped in the event it actually converts. 您的ISBN可能应该是VARCHAR,因为它包含一个前导0,如果实际进行转换,它将被删除。 So @marc_s is right, drop the quotes from all your numeric values to be inserted; 所以@marc_s是正确的,删除​​要插入的所有数字中的引号; this includes ISBN (currently), page number, and price. 这包括ISBN(当前),页码和价格。

I believe the error actually refers to what you have entered in the price field, which is $8.30 . 我认为错误实际上是指您在price字段中输入的$8.30 ,即$8.30 A numeric doesn't know how to read $ in SQL. 数值不知道如何在SQL中读取$ Also, there is a data type that coners such needs called money . 同样,有一种满足这种需求的数据类型称为money Drop the $ and change the data type of the price column to money and you should be OK. 删除$并将price列的数据类型更改为money,您应该可以。

Hope this helps. 希望这可以帮助。

-C§ -C§

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM