Oracle查询中 SAS宏日期的正确语法

我试图在一夜之间查询过去一周对 Oracle 数据库的添加,并且需要使用宏来填充日期。如果我对实际日期进行硬编码,我可以运行下面的查询。我在宏 vars&sd和&ed上尝试了双引号和单引号。请指教。

我试图在一夜之间查询过去一周对 Oracle 数据库的添加,并且需要使用宏来填充日期。如果我对实际日期进行硬编码,我可以运行下面的查询。我在宏 vars&sd&ed上尝试了双引号和单引号。请指教。

data _null_;
sd = dhms(today()-7,00,00,00);
ed = dhms(today()-1,23,59,59);
call symput("sd", put(sd, datetime20.));
call symput("ed", put(ed, datetime20.));
run;
%put &sd &ed;
proc sql;
connect to oracle (user=x password=x path=x);
create table weekly_test as
select * from connection to oracle
(select * from x.Estimates
where state_fips_code = '41' 
and altered_date between 
    to_date('&sd','DDMONYYYY:HH24:MI:SS')
    and to_date('&ed','DDMONYYYY:HH24:MI:SS'));
disconnect from oracle;
quit;

错误

ORACLE 执行错误:ORA-01858:在需要数字的地方找到了非数字字符。

和双引号

and altered_date between 
    to_date("&sd",'DDMONYYYY:HH24:MI:SS')
    and to_date("&ed",'DDMONYYYY:HH24:MI:SS'));

此错误

ERROR: ORACLE prepare error: ORA-00904: "  21MAR2012:23:59:59": invalid identifier. SQL
statement: select * from X.Estimates where state_fips_code = '41' and altered_date
between to_date("  15MAR2012:00:00:00",'DDMONYYYY:HH24:MI:SS') and to_date("
21MAR2012:23:59:59",'DDMONYYYY:HH24:MI:SS').
2

事实上,我不认为有必要将其格式化为日期时间文字;只需构建一个正常的 ANSI 日期字符串(YYYY-MM-DD),你也可以摆脱 TO_DATE 函数调用。

例如,尝试以下两个语句:

%let SD=%str(%')%sysfunc( putn( %sysfunc(intnx(day,%sysfunc(today()) ,-7)),yymmdd10.))%str(%'); 
%let ED=%str(%')%sysfunc( putn( %sysfunc(intnx(day,%sysfunc(today()) ,-1)),yymmdd10.))%str(%');

这些将 SD 定义为 today()-7,将 ED 定义为 today()-1(使用纯宏代码而不是数据步骤)。然后,在您的查询中,引用这些不带引号的宏变量:

proc sql;
connect to oracle (user=x password=x path=x);
create table weekly_test as
select * from connection to oracle
(select * from x.Estimates
where state_fips_code = '41' 
and altered_date between &sd and &ed
);
disconnect from oracle;
quit;
0

非常感谢 Bob。我试过你发布的代码,得到了 ORA-01861:literal 不匹配格式字符串。无论如何你让我思考正确的路径。我只是添加了代码,在数据步骤中的日期周围加上单引号,它起作用了。对于任何有类似问题的人,代码如下。

data _null_;
sd = dhms(today()-7,00,00,00);
ed = dhms(today()-1,23,59,59);
call symput('sd',"'"|| trim(left(put(sd, datetime20.)))||"'");
call symput('ed', "'"||trim(left(put(ed, datetime20.)))||"'");
run;
%put &sd &ed;
proc sql;
connect to oracle (user=x password=x path=x);
create table weekly_test as
select * from connection to oracle
(select * from x.Estimates
where state_fips_code = '41' 
and altered_date between 
    to_date(&sd,'DDMONYYYY:HH24:MI:SS')
    and to_date(&ed,'DDMONYYYY:HH24:MI:SS'));
disconnect from oracle;
quit;
0

这个作品…

%LET SD = %SYSFUNC(intnx(day,"&SYSDATE9"d,-7,b),date9.) ;
%LET ED = %SYSFUNC(intnx(day,"&SYSDATE9"d,-1,b),date9.) ;
%PUT &SD &ED ;
proc sql ;
  connect to oracle (user=x password=x path=x);
  create table weekly_test as
  select * from connection to oracle
  (select * from x.Estimates
   where state_fips_code = '41'
     and altered_date between %BQUOTE('&SD') and %BQUOTE('&ED')
  );
  disconnect from oracle ;
quit ;

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(308)
如何使CSS内容斜体和粗体
上一篇
从电子应用程序调用.NET核心库
下一篇

相关推荐

  • Cx游戏:cx_Oracle版本检查

    关于Cx游戏的问题,在python cx oracle中经常遇到,我正在使用 PyCharm 2019.1 Professional,并且能够使用精简驱动程序(jdbc:oracle:thin:@host:PORT:SID)连接到 Oracle JDBC 数据库。我正在尝试使用cx_Oracle库 (版本 1.1.9) 和Anaconda 3.6,但似乎没有函数.connect或.makedsn与库。…

    2022-11-26 09:38:12
    0 77 57
  • 数据库blob类型:Oracle数据库:如何读取BLOB

    关于数据库blob类型的问题,在bytepay login中经常遇到,我正在使用 Oracle 数据库,我想读取 BLOB 的内容。…

    2022-12-22 05:02:32
    0 66 76
  • Oracle数据库备份表:通过RMAN进行Oracle数据库备份

    关于Oracle数据库备份表的问题,在what is oracle rman中经常遇到,我正在寻找备份我的 Oracle 数据库的方法。它托管在 Windows 服务器上。目前,我使用 Oracle SQL Developer 与数据库建立连接并对其进行更改。我现在正在考虑 2 种方法来备份数据库。…

    2022-12-15 15:46:14
    0 36 28
  • 安装数据库教程:ApexOracleStudent数据库教程问题

    关于安装数据库教程的问题,在oracle apex tutorial中经常遇到,这有什么问题?或者有人可以帮助我理解这个代码想要做什么?…

    2022-12-25 07:34:19
    0 58 63
  • Oracle数据库大作业:从 ORACLE中的另一个架构访问数据库作业

    关于Oracle数据库大作业的问题,在jobs schema中经常遇到,我有两个模式“所有者”和“用户”。…

    2022-11-27 14:18:44
    0 50 94
  • 哪个平台转播cba:我的Oracle在哪个平台上运行

    关于哪个平台转播cba的问题,在oracle platform中经常遇到,我已经获得了访问某个地方运行的 Oracle 实例的权限,但我无法访问其底层平台。即我有一个数据库用户和数据库连接信息,包括主机名,端口号和 SID,因此我可以使用SQL*Plus连接到数据库并运行我的查询,但我甚至不知道它是在 Windows 还是 Linux 上运行。…

    2022-12-01 11:18:36
    0 36 66
  • sqlserver的convert:使用CONVERT函数从日期格式转换为字符串格式

    示例示例CONVERT函数是SQL Server中的一个内置函数,用于将一个表达式的数据类型转换为另一种数据类型。语法:…

    2023-01-30 04:42:09
    0 59 49
  • java实现websocket:如何使用Java实现Websocket通信

    示例示例Java实现的步骤如下:在服务器端创建一个对象,监听指定的端口,等待客户端连接。…

    2023-01-17 13:12:07
    0 19 18

发表评论

登录 后才能评论

评论列表(51条)