我的表如下所示,该表在VARCHAR2中声明:
YMD
20101010
20101112
20100231
20150101
20160101
我必须检查有效日期并从sysdate过滤将来的日期,这些日期必须是有效格式。
我编写以下函数来检查有效日期:
create or replace FUNCTION VALIDATE_DATE (p_string in string) return date is
begin
return to_date(p_string, 'YYYYMMDD');
exception when others then
begin
return to_date(p_string, 'YYYY-MM-DD');
exception when others then
begin
return to_date(p_string, 'RR-MON-DD');
exception when others then
return null;
end;
end;
end;
并编写了此查询来检查有效日期,并用null替换无效日期
select ymd, VALIDATE_DATE(ymd) as Valid
from temp
并检查未来的日期,我写了以下查询,但是会引发错误
ORA-01839
select ymd
from temp
where validate_date(ymd)='YES'
and to_date(ymd,'yyyymmdd')>sysdate
如何检查表格中将来的日期(如果存在)?
我宁愿将 设计问题 作为永久性修复,而不是将时间浪费在解决方法上。
首先, 永远不要 将 DATE 存储为 VARCHAR2 。所有这些开销是由于您的 设计存在缺陷 。
‘20100231’
究竟怎么算是有效日期? 哪个日历在2月有31天?
跟着这些步骤:
更新 添加演示
设置
SQL> CREATE TABLE t
2 (ymd varchar2(8));
Table created.
SQL>
SQL> INSERT ALL
2 INTO t (ymd)
3 VALUES ('20101112')
4 --INTO t (ymd)
5 -- VALUES ('20100231')
6 INTO t (ymd)
7 VALUES ('20150101')
8 INTO t (ymd)
9 VALUES ('20160101')
10 SELECT * FROM dual;
3 rows created.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
添加新列:
SQL> ALTER TABLE t ADD (dt DATE);
Table altered.
SQL>
做所需的更新
SQL> UPDATE t
2 SET dt =
3 CASE
4 WHEN to_date(ymd, 'YYYYMMDD') > SYSDATE
5 THEN NULL
6 ELSE to_date(ymd, 'YYYYMMDD')
7 END;
3 rows updated.
SQL>
SQL> COMMIT;
Commit complete.
SQL>
让我们检查:
SQL> SELECT * FROM t;
YMD DT
-------- ---------
20101112 12-NOV-10
20150101 01-JAN-15
20160101
SQL>
删除旧列:
SQL> ALTER TABLE t DROP COLUMN ymd;
Table altered.
SQL>
将新列重命名为旧列名
SQL> ALTER TABLE t RENAME COLUMN dt TO ymd;
Table altered.
SQL>
您已经解决了问题
SQL> SELECT * FROM t;
YMD
---------
12-NOV-10
01-JAN-15
SQL>
问题内容: 我很好奇,用Java 创建对象的最明显的方法已被弃用,并且似乎已被使用宽大日历的不太明显的方法“替代”。 如何检查以日,月和年的组合形式给出的日期是否为有效日期? 例如,2008-02-31(如yyyy-mm-dd)将是无效日期。 问题答案: 当前的方法是使用日历类。它具有setLenient方法,该方法将验证日期和引发异常,如果超出示例,则抛出异常。 忘记添加:如果您获得日历实例并使
以下是场景: 我有一个日期和一个不同的日期格式。示例: 日期:2016-10-19 日期格式:“DD-MM-YYYY”。 我需要检查这个日期是否有效。 我尝试过跟踪事情 d.isValid()每次返回false。Moment.js解析给定格式的日期吗? 然后我尝试先在中格式化日期,然后将其传递给矩。js: 现在<代码>日期。isValid()给了我想要的结果,但现在是时候了。js日期对象创建两次。
问题内容: 我正在构建一种日历Web应用程序 我已经在HTML中设置了以下表格 然后,来自用户的输入将被提交到小服务器中 我想知道,有没有办法检查用户输入的日期是否是有效日期? 显然,我可以编写很多if语句,但是是否有任何内置函数可以检查这一点? 谢谢 问题答案: 你可以尝试做 这将消除诸如> 12,小时> 23,不存在的leap日等问题(在不month年,month = 2的最大值为28,否则为
问题内容: 我正在Linux中编写bash shell脚本,该程序将接受日期(mm-dd- yyyy)作为参数。我想知道是否有一种简单的方法来检查日期是否有效?有操作员,我可以使用测试进行检查吗? 问题答案: 您可以检查 因此是有效的,但是使用连字符(例如)对于无效。 您也可以使用单词:或都有效。
问题内容: 在我的项目中,我需要检查日期字符串是否评估为正确的Date对象。我决定允许yyyy-MM- dd和Date格式[(年,月,日)和(年,月,日,时,分)。我如何检查它们是否有效?我的代码返回“ 1980-01-01”的null和一些奇怪的日期(例如3837.05.01),这些日期给出了用逗号分隔的字符串: 我记得我必须从年份中减去1900,但是我也看到月份不同,所以我想避免检查日期字符串
问题内容: 检查URL在Java中是否有效的最佳方法是什么? 如果试着拨打和赶上,但它似乎很乐意与任何开头。 我不关心建立连接,只是有效性。有办法吗?Hibernate Validator中的注释?我应该使用正则表达式吗? 编辑:和 URL的一些示例。 问题答案: 考虑使用Apache Commons UrlValidator类 有几个属性,您可以设置来控制如何类的行为,在默认情况下,和被接受。