PL SQL - 以 dd/mm/yyyy +1 格式添加日期

Posted

技术标签:

【中文标题】PL SQL - 以 dd/mm/yyyy +1 格式添加日期【英文标题】:PLSQL - Add days to date in format dd/mm/yyy +1 【发布时间】:2015-04-15 00:19:16 【问题描述】:

我想用下面的方式写一个PLSQL查询:

Select ...
FROM ...
WHERE
Date = '06/FEB/2011' + 7(days)

我是 PLSQL 的新手,我见过诸如 date+1 之类的解决方案,但这需要按日期在变量中。 我厌倦了放入如下变量:

declare date1  date;
begin
date1 := '06/FEB/2015';
select *
from 
    ...
where
        DATE_LABEL = date1 + 1;

end;

但它一直给我一个错误,期望在 SELECT 中有一个 INTO 语句。我不确定这意味着什么。

谢谢

【问题讨论】:

【参考方案1】:

    DATE 数据类型不存储为字符串,因此不建议硬编码为特定格式,因为格式可能会根据您的数据库/会话 NLS_DATE_FORMAT 值而改变。更便携的表达方式是在查询中包含数据格式掩码,如:

    select * 
    from table Foo
    where date_col = to_date('06/FEB/2011','DD/MON/YYYY) + 7;
    

日期格式掩码值记录在here。

    在 pl/sql 块中执行查询时,您必须在某个位置定义结果集以在返回时存储。您需要为此使用光标。在您的示例中,如果您只有一行要返回,您可以像您一样为结果声明一个占位符,但需要在您的选择中使用 INTO 关键字:

    declare date1  date;
    begin
    date1 := '06/FEB/2015';
    select date_col
    into   date1
    from  table  -- etc.    
    end;
    

我建议阅读一些 PL/SQL 教程,其中详细介绍了这些基本概念。

【讨论】:

【参考方案2】:

实际上,更便携的解决方案是使用标准的 Ansi 日期文字。这将得到大量 DBMS 的认可。所以你的代码看起来像这样:

Select  ...
FROM    ...
WHERE   DateField = date '2011-02-06' + 7;

WHERE   DateField = (date '2011-02-06') + 7;

只是为了更清楚。

日期文字必须采用'yyyy-mm-dd'的形式,不受系统日期格式设置的影响。

【讨论】:

【参考方案3】:
ADDDATE(date, INTERVALE INTEGER DAY) 

您应该写下天数,也可以使用月、分、小时。

【讨论】:

以上是关于PL SQL - 以 dd/mm/yyyy +1 格式添加日期的主要内容,如果未能解决你的问题,请参考以下文章

如何以 dd/mm/yyyy 格式显示日期? [复制]

如何屏蔽 EditText 以显示 dd/mm/yyyy 日期格式

标准化 SQL 表中的列

Javascript 日期正则表达式 DD/MM/YYYY

在 ionic 4 + Angular 中将日期转换为 DD/MM/YYYY

以编程方式打开文件时,日期格式/值会发生变化