【问题标题】:ERROR: invalid input syntax for integer: "1.5"?错误:整数的无效输入语法:“1.5”?
【发布时间】:2020-01-08 23:31:29
【问题描述】:

我正在尝试执行以下代码以查看我是否正确关联了模型的表:

drop table if exists ImportA;
create table ImportA (

    id varchar(255),
    url varchar(255),
    name varchar(255),
    description text,
    picture_url varchar(255),
    street varchar(255),
    neighbourhood varchar(255),
    city varchar(255),
    state varchar(255),
    zipcode varchar(255),
    country_code varchar(255),
    country varchar(255),
    property_type varchar(255),
    accommodates varchar(255),
    bathrooms varchar(255),
    bedrooms varchar(255),
    beds varchar(255),
    amenities text,
    square_feet varchar(255),
    price varchar(255),
    weekly_price varchar(255),
    monthly_price varchar(255),
    security_deposit varchar(255),
    cleaning_fee varchar(255),
    minimum_nights varchar(255),
    maximum_nights varchar(255)
);

drop table if exists ImportH;
create table ImportH (

    url varchar(255),
    name varchar(255),
    description text,
    picture_url varchar(255),
    host_id  varchar(255),
    host_url varchar(255),
    host_name varchar(255),
    host_since varchar(255),
    host_about text,
    host_response_time varchar(255),
    host_response_rate varchar(255),
    host_is_superhost varchar(255),
    host_picture_url varchar(255),
    host_listings_count varchar(255),
    host_verifications varchar(255),
    host_identity_verified varchar(255)
);

drop table if exists ImportR;
create table ImportR (

    id varchar(255),
    url varchar(255),
    name varchar(255),
    description text,
    picture_url varchar(255),
    street varchar(255),
    neighbourhood varchar(255),
    city varchar(255),
    date_review varchar(255),
    reviewer_id varchar(255),
    reviewer_name varchar(255),
    comments text
);

copy ImportA from '/Users/Shared/BDD/apartments.csv' csv header delimiter ',';
copy ImportH from '/Users/Shared/BDD/hosts.csv' csv header delimiter ',';
copy ImportR from '/Users/Shared/BDD/review.csv' csv header delimiter ',';

drop table if exists Country cascade;
create table Country (

    country_code varchar(255),
    country varchar(255),
    primary key (country_code)
);

drop table if exists Payment cascade;
create table Payment (

    id_payment serial,
    price money,
    weekly_price money,
    monthly_price money,
    security_deposit money,
    cleaning_fee money,
    primary key (id_payment)
);

drop table if exists Characteristic cascade;
create table Characteristic (

    id_characteristic serial,
    property_type varchar(255),
    accommodates int,
    bathrooms int,
    bedrooms int,
    beds int,
    square_feet int,
    minimum_nights int,
    maximum_nights int,
    primary key (id_characteristic)
);

drop table if exists Host cascade;
create table Host (

    host_id int,
    host_url varchar(255),
    host_name varchar(255),
    host_since date,
    host_about text,
    host_response_time varchar(255),
    host_response_rate varchar(255),
    host_is_superhost boolean,
    host_picture_url varchar(255),
    host_listings_count int,
    host_identity_verified boolean,
    primary key (host_id)
);

drop table if exists Media cascade;
create table Media (

    id_verification serial,
    media varchar(255),
    primary key (id_verification)
);

drop table if exists RelationHostMedia cascade;
create table RelationHostMedia (

    host_id int,
    id_verification int,
    primary key (host_id, id_verification),
    foreign key (host_id) references Host (host_id),
    foreign key (id_verification) references Media (id_verification)
);

drop table if exists Amenitie cascade;
create table Amenitie (

    id_amenitie serial,
    id_characteristic int,
    amenitie varchar(255),
    primary key (id_amenitie),
    foreign key (id_characteristic) references Characteristic (id_characteristic)
);

drop table if exists Place cascade;
create table Place (

    id_place serial,
    street varchar(255),
    neighbourhood varchar(255),
    city varchar(255),
    state varchar(255),
    zipcode varchar(255),
    country_code varchar(255),
    primary key (id_place),
    foreign key (country_code) references Country (country_code)
);

drop table if exists Apartment cascade;
create table Apartment (

    id_apartment int,
    url varchar(255),
    name varchar(255),
    description text,
    picture_url varchar(255),
    id_place int,
    id_payment int,
    id_characteristic int,
    host_id int,
    primary key (id_apartment),
    foreign key (id_place) references Place (id_place),
    foreign key (id_payment) references Payment (id_payment),
    foreign key (id_characteristic) references Characteristic (id_characteristic),
    foreign key (host_id) references Host (host_id)
);

drop table if exists Reviewer cascade;
create table Reviewer (

    reviewer_id int,
    reviewer_name varchar(255),
    primary key (reviewer_id)
);

drop table if exists Review cascade;
create table Review (

    id_review serial,
    reviewer_id int,
    id_apartment int,
    date_review date,
    comments text,
    primary key (id_review),
    foreign key (reviewer_id) references Reviewer (reviewer_id),
    foreign key (id_apartment) references Apartment (id_apartment)
);

insert into Country (country_code, country)
select distinct country_code, country
from ImportA;

insert into Payment (price, weekly_price, monthly_price, security_deposit, cleaning_fee)
select cast(price as money), cast(weekly_price as money), cast(monthly_price as money), cast(security_deposit as money), cast(cleaning_fee as money)
from ImportA;

insert into Characteristic (property_type, accommodates, bathrooms, bedrooms, beds, square_feet, minimum_nights, maximum_nights)
select property_type, cast(accommodates as int), cast(bathrooms as int), cast(bedrooms as int), cast(beds as int), cast(square_feet as int), cast(minimum_nights as int), cast(maximum_nights as int)
from ImportA;

insert into Host (host_id, host_url, host_name, host_since, host_about, host_response_time, host_response_rate, host_is_superhost, host_picture_url, host_listings_count, host_identity_verified)
select cast(host_id as int), host_url, host_name, cast(host_since as date), cast(host_about as text), host_response_time, host_response_rate, cast(host_is_superhost as boolean), host_picture_url, cast(host_listings_count as int), cast(host_identity_verified as boolean)
from ImportH;

insert into Media (media)
select host_verifications
from ImportH;

insert into RelationHostMedia (host_id, id_verification)
select distinct host_id, id_verification
from Host, Media;

insert into Amenitie (id_characteristic, amenitie)
select id_characteristic, amenities
from Characteristic, ImportA;

insert into Place (street, neighbourhood, city, state, zipcode, country_code)
select street, neighbourhood, city, state, zipcode, country_code
from ImportA, Country;

insert into Apartment (id_apartment, url, name, description, picture_url, id_place, id_payment, id_characteristic, host_id)
select cast(id_apartment as int), url, name, cast(description as text), picture_url, id_place, id_payment, id_characteristic, host_idfrom ImportA, Place, Payment, Characteristic, Host;

select id_place from Apartment;

此代码只是导入表和主表的创建,以及将数据插入到每个表中,将它们关联起来。另外,我不是 100% 确定这种关系编码是否正确,我试图通过调试它来弄清楚它,但我执行它时的输出是:

错误:整数的无效输入语法:“1.5”

这是什么意思?我检查了我所有的整数属性,它们看起来很好,也没有名为“1,5”的属性。

【问题讨论】:

  • 检查 csv 文件中的数字格式

标签: sql postgresql int


【解决方案1】:

您似乎正在尝试将值 1.5 插入到整数字段中。

1.5 不是整数。

【讨论】:

    【解决方案2】:

    您能否验证此查询(用于提供特征表)是否正常工作:

      Select property_type, cast(accommodates as int), cast(bathrooms as int), cast(bedrooms as int), cast(beds as int), cast(square_feet as int), cast(minimum_nights as int), cast(maximum_nights as int) from ImportA;
    

    否则,您将不得不检查您尝试执行的所有请求(强制转换字段整数),以检测将此十进制值 (1.5) 转换为整数的问题。

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2012-12-21
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2013-08-20
      • 1970-01-01
      相关资源
      最近更新 更多