Oracle中的ansisql日期函数
我意识到我可以使用to_char和to_date之类的组合作为一种变通方法,但我正在试图弄清楚为什么这不起作用。我正在使用Oracle 12.1Oracle中的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
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用于固定数据值
。我将准备动态演示