Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在视图Oracle SQL中运行函数_Sql_Oracle - Fatal编程技术网

在视图Oracle SQL中运行函数

在视图Oracle SQL中运行函数,sql,oracle,Sql,Oracle,我正在尝试创建一个视图,返回某个日期之间的所有预订。我有一个名为Booking的表,其中包括以下列: startDate date, noOfDays int, 还有更多与我试图创建的视图无关的列 我正在尝试运行以下查询以创建视图,但它似乎失败了,出现错误“ORA-00904:“DATEADD”:无效标识符“ 创建查看当前预订作为 从预订中选择* 其中startDate=>“2018-03-12” startDate您的查询有几个问题。但最重要的是,DATEADD()在Oracle中不是有效的

我正在尝试创建一个视图,返回某个日期之间的所有预订。我有一个名为Booking的表,其中包括以下列:

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