在视图Oracle SQL中运行函数
我正在尝试创建一个视图,返回某个日期之间的所有预订。我有一个名为Booking的表,其中包括以下列:在视图Oracle SQL中运行函数,sql,oracle,Sql,Oracle,我正在尝试创建一个视图,返回某个日期之间的所有预订。我有一个名为Booking的表,其中包括以下列: startDate date, noOfDays int, 还有更多与我试图创建的视图无关的列 我正在尝试运行以下查询以创建视图,但它似乎失败了,出现错误“ORA-00904:“DATEADD”:无效标识符“ 创建查看当前预订作为 从预订中选择* 其中startDate=>“2018-03-12” startDate您的查询有几个问题。但最重要的是,DATEADD()在Oracle中不是有效的
startDate date,
noOfDays int,
还有更多与我试图创建的视图无关的列
我正在尝试运行以下查询以创建视图,但它似乎失败了,出现错误“ORA-00904:“DATEADD”:无效标识符“
创建查看当前预订作为
从预订中选择*
其中startDate=>“2018-03-12”
startDate您的查询有几个问题。但最重要的是,DATEADD()
在Oracle中不是有效的函数。Oracle数据算法非常简单;只需将noOfDays
添加到startDate
:
CREATE VIEW Present_bookings AS
SELECT * FROM Booking
WHERE startDate >= DATE'2018-03-12'
AND startDate <= startDate + noOfDays;
或
逻辑不正确所有开始日期都少于开始日期+5天。你确定这种情况吗?如果是,则简化为:
CREATE VIEW Present_bookings AS
select *
FROM Booking
where startDate >= to_date('2018-03-12','YYYY-MM-DD')
或者你可能在想:
CREATE VIEW Present_bookings AS
select *
FROM Booking
where startDate between to_date('2018-03-12','YYYY-MM-DD')
and to_date('2018-03-17','YYYY-MM-DD')
我想你是在寻找一种简单的方法来增加一个日期的天数。
尝试在此处使用interval
:
select sysdate, sysdate + interval '5' day as "FUTURE" from dual;
=>
SYSDATE FUTURE
22.03.2018 14:37:27 27.03.2018 14:37:27
把'5'
当作一个字符,而不是一个数字。
这也适用于年、月(此处为29.02)等。我不认为DATE\u ADD
是Oracle函数DateAdd是未知的。这是一个应该在您的模式中的函数吗?语法DateAdd(日期、格式、天、月、年)您收到了一个Oracle错误,因此您使用的是Oracle,而不是MySQL。您的错误代码ORA-00904
意味着运行Oracle。我不熟悉日期2018-03-12'符号。如何为此指定日期格式?它是ANSI日期文字-YYYY-MM-DD
谢谢David!我也意识到了我在操作标志上的错误,而且事实上startDate总是小于startDate+5…而且,如果您真的想要当前预订,请使用SYSDATE
代替日期constantAh是的,您是对的。我的愚蠢!非常感谢你!如果你喜欢我的答案,请接受并/或投票表决。谢谢
CREATE VIEW Present_bookings AS
select *
FROM Booking
where startDate >= to_date('2018-03-12','YYYY-MM-DD')
CREATE VIEW Present_bookings AS
select *
FROM Booking
where startDate between to_date('2018-03-12','YYYY-MM-DD')
and to_date('2018-03-17','YYYY-MM-DD')
select sysdate, sysdate + interval '5' day as "FUTURE" from dual;
=>
SYSDATE FUTURE
22.03.2018 14:37:27 27.03.2018 14:37:27