declare
x integer;
begin
select to_char(sysdate,'hh') into x from dual;
if x > 12 then
select sysdate from dual;
else
select sysdate+1 from dual;
end if;
end;
declare
x integer;
d date;
begin
select to_number(to_char(sysdate, 'hh24')) into x from dual;
if x > 12 then
select sysdate into d from dual;
else
select sysdate+1 into d from dual;
end if;
-- do something with the variable
dbms_output.put_line(to_char(d, 'YYYY-MM-DD HH24:MI:SS'));
end;
/
1条答案
按热度按时间vddsk6oq1#
您在PL/SQL上下文中运行所有三个查询(在匿名PL/SQL块中,在
begin
和end
之间),因此它们都需要遵循PL/SQL规则。这意味着它们都需要被选择到某个对象中(或被视为游标),因此需要一个日期变量来选择,然后需要对该变量执行一些操作:
请注意,我还将第一个查询更改为使用
hh24
元素,因为hh
给出了12小时制的时间,该时间永远不会超过12。实际上并不需要第一个查询,只需执行以下操作即可:
但是看起来您使用PL/SQL只是为了能够使用
if/then/else
结构,而if/then/else
结构在普通SQL中是不可用的。但是它确实有case
,所以正如@jarlh所说,您可以:或
即使您将日期更改为明天,也会保留当前系统时间;您 * 可能 * 想要将时间设置为午夜,您可以使用
trunc(sysdate)
来实现这一点。这个逻辑看起来也很奇怪,但还是不清楚您的意图; 00-12被修改为明天,13-23被保留为今天,这可能是反向的。如果您想将中午之后(包括中午)的任何时间视为明天,那么如果小时是12点或以上,您应该添加一天,因此00-11被保留为今天,12-23被修改为明天。如果这是您的意思,那么您可以执行以下操作:
或者更简单地说,假设您不想保留运行的实际时间,您可以执行以下操作:
fiddle