表中我的一天与服务器中的 sysdate 之间的比较

Posted

技术标签:

【中文标题】表中我的一天与服务器中的 sysdate 之间的比较【英文标题】:Comparison between my day in table and the sysdate in server 【发布时间】:2013-07-17 13:22:32 【问题描述】:

我正在尝试编写函数以在比较服务器上的当前日期名称和我的表格内容上的日期名称后返回 day_id

**我的代码是

 create or replace 
 FUNCTION GETSYSDATE
 return char 
 is
 v_day char(20) ;
 v_day_id days.day_id%type ;
 v_day_name days.day_name%type ;
 begin
 select day_id, to_char(sysdate, 'day', 'nls_date_language=arabic'), day_name
 into v_day_id,v_day,v_day_name
 from days
 where v_day_name = v_day ;
 return v_day_id ;
 end;

但不幸的是,没有找到数据!

注意! : day_name的dataType是varchar (20 byte)

**the error
 Connecting to the database admin.
 ORA-01403: no data found
 ORA-06512: at "ADMIN.GETSYSDATE", line 9
 ORA-06512: at line 5
 Process exited.
 Disconnecting from the database admin.

** my table 
 DAY_ID NUMBER
 DAY_NAME   VARCHAR2(20 BYTE)

【问题讨论】:

【参考方案1】:

您的过滤器正在使用尚未初始化的局部变量;实际上,您正在尝试设置它们并同时使用它们进行过滤,这没有多大意义。

where v_day_name = v_day

...永远不会匹配您表中的任何记录。

我认为这是你想要的:

create or replace function getsysdate return days.day_id%type is
  v_day_id days.day_id%type;
begin
  select day_id
  into v_day_id
  from days
  where day_name = to_char(sysdate, 'day', 'nls_date_language=arabic');
  return v_day_id;
end;
/

我不知道您的days 表是如何填充的,但我猜day_id 是1-7,day_name 是对应的日期,而在您所在的地区您无法获得使用简单的TO_CHAR 即可轻松实现。所以this SQL Fiddle 显示了基于该假设的函数,但可能 ID 的顺序错误。我已经将它显示为匿名块中的赋值,并在普通 SQL 中使用。

【讨论】:

【参考方案2】:

根据我对您的问题的了解,您有一个填满日期名称的表格,并且您想查询服务器当前日期的等效 day_id。 所以脚本中有多个错误,例如: 由于您希望 GETSYSDATE 返回 DAY_ID,您需要将 return 语句声明为 Number 或 DAYS.DAY_ID%TYPE 您的 selectwhere 语法存在错误条件。 ... 愿此功能对您有所帮助

CREATE Function GETSYSDATE RETURN number
 is
 v_day_id days.DAY_ID%TYPE;
 begin
   select day_id
   into v_day_id
   from days
   where DAY_NAME = to_char(sysdate, 'day', 'nls_date_language=arabic') ;
   return v_day_id ;
   exception when no_data_found then
  return -1;
 end;

Sqlfiddle show.

【讨论】:

以上是关于表中我的一天与服务器中的 sysdate 之间的比较的主要内容,如果未能解决你的问题,请参考以下文章

php获取当前周的第一天与最后一天

C#如何获得当前月的第一天与最后一天

获得当前日期所属的本周第一天与最后一天

0919MYSQL中取当前周/月/季/年的第一天与最后一天

java中如何得到上一个的月第一天与最后一天。(不以当前日期为标准)

oracle数据库中我想将a表中的b列结果为负数的转换成0,或者特定的一个数