我有以下格式化日期PostgreSQL的
DateFormat dformat = new SimpleDateFormat("yyyy-M-d");
dformat.setLenient(false);
Date cin = dformat.parse(cinDate);
和SQL函數
create or replace function search(_checkIn date, _checkOut date) returns setof Bookings as $$
declare
r Bookings;
begin
for r in
select * from Bookings
loop
if ((_checkIn between r.checkIn and r.checkOut) or (_checkOut between r.checkIn and r.checkOut)) then
return next r;
end if;
end loop;
return;
end;
$$ language plpgsql;
爲PostgreSQL的日期格式爲標準(默認)
create table Bookings (
id serial,
status bookingStatus not null,
pricePaid money not null,
firstName text,
lastName text,
address text,
creditCard text,
checkOut date not null,
checkIn date not null,
room integer not null,
extraBed boolean not null default false,
foreign key (room) references Rooms(id),
primary key (id)
);
和我m試圖解析一個日期到函數,所以它可以爲我返回一個表,我似乎遇到了日期格式問題(這就是爲什麼我想我得到這個錯誤)
org.postgresql.util.PSQLException: ERROR: syntax error at or near "Feb"
所以我想知道我會如何解決這個問題,我不知道如何格式化日期正確
編輯:
我打電話這樣
try {
String searchQuery = "SELECT * FROM Rooms r where r.id not in (select * from search(" + cin +", " + cout +"))";
PreparedStatement ps = conn.prepareStatement(searchQuery);
rs = ps.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
查詢,所以我認爲錯誤進來,因爲我格式化日期的方式是錯誤的,Postgres將無法讀取它
不清楚爲什麼你需要首先解析或格式化。輸入來自哪裏,你如何調用函數? –
此聲明:'..其中r.id不在(select * from ...)中'是無效的SQL。您必須在子選擇中選擇一個列。 –
@a_horse_with_no_name,好點,我沒有真正閱讀查詢本身的細節。我覺得沒有這個功能,可以做得更好。 – Bruno