Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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中的ansisql日期函数_Sql_Oracle_To Date - Fatal编程技术网

Oracle中的ansisql日期函数

Oracle中的ansisql日期函数,sql,oracle,to-date,Sql,Oracle,To Date,我意识到我可以使用to_char和to_date之类的组合作为一种变通方法,但我正在试图弄清楚为什么这不起作用。我正在使用Oracle 12.1 select '2016-10-01' from dual union all select to_char(2016)||'-10-01' from dual; 欧盟每一方的产出都相同:2016-10-01。如果我尝试使用ANSI日期语法(如下所述:),它只适用于第一个,而不适用于第二个: select date '2016-10-01

我意识到我可以使用to_char和to_date之类的组合作为一种变通方法,但我正在试图弄清楚为什么这不起作用。我正在使用Oracle 12.1

 select '2016-10-01'
 from dual

union all

select to_char(2016)||'-10-01'
 from dual;
欧盟每一方的产出都相同:2016-10-01。如果我尝试使用ANSI日期语法(如下所述:),它只适用于第一个,而不适用于第二个:

 select date '2016-10-01'
 from dual
本次申报日期:2016年10月1日

但如果我尝试这样做:

 select date to_char(2016)||'-10-01'
   from dual;
我开始:

ORA_00936缺少表达式错误


我可以编写一个工作循环,但我不明白为什么一个工作循环,而另一个不工作。

这样不行,因为
日期
不是一个函数,而是一个函数

术语文字值和常量值是同义词,指的是固定的数据值。

日期文字

可以将日期值指定为字符串文字,也可以使用to_DATE函数将字符或数值转换为日期值。日期文字是Oracle数据库接受TO_日期表达式而不是字符串文字的唯一情况

您可以使用
更新
功能

select TO_DATE(to_char(2016)||'-10-01', 'YYYY-MM-DD')
from dual;

编辑:

使用动态SQL:

DECLARE
  i DATE;
  stmt VARCHAR2(100);
BEGIN
  stmt := q'{SELECT  DATE '}' || TO_CHAR(2016) || '-01-01' ||  q'{' FROM dual}';

  EXECUTE IMMEDIATE stmt INTO i;
  DBMS_OUTPUT.PUT_LINE('i =>' || i);
END;

date
是定义日期常量的关键字。你没有一个常数跟在它后面。如果他使用一个子查询或括号,它不会工作吗?Rextester说不,哈哈。好的,我正在清理我的问题,它肯定不是一个函数。我确实试过让父母了解整件事(例如:date(to|char(2016)| |'-10-01)),但那也不管用,我想会的。我很感激你提供的解决方案,但我更多的是出于好奇;看来我的工会双方都会合作。我现在将以不同的方式编写代码。@fleetmack关键的一点是,literal用于
固定数据值
。我将准备动态演示