首页 > 解决方案 > Oracle 正则表达式来验证时间

问题描述

我正在尝试验证 oracle SQL 中的正则表达式以检查时间格式:

我要检查的所需格式是:

2/27/2020 3:53:02 PM

我已经为日期格式创建了一个正则表达式,例如:

20200227 --> using REGEXP_LIKE('20190222', '^\d{4}(0[1-9]|(1[0-2]))(0[1-9]|[1-2][0-9]|3[0-1])$')

有人可以给我一个时间格式的提示吗?

标签: sqlregexoracle

解决方案


对我来说,看起来好像你开始错了。如果要验证日期时间)格式,则将其存储为字符串,这是一个很大的错误。

如果您将该列(或其他任何内容)设置为DATE,在 Oracle 中该列同时包含日期和时间,那么数据库将注意您只能输入有效值。

您提到的格式或任何其他格式是显示问题,而不是存储问题。


一种选择是强制TO_DATE转换;像这样的东西:

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';

Session altered.

SQL> set ver off
SQL> select to_date('&date_value', 'mm/dd/yyyy hh:mi:ss am') result from dual;
Enter value for date_value: 2/27/2020 3:53:02 pm

RESULT
-------------------
27.02.2020 15:53:02

SQL> /
Enter value for date_value: 13/54/2020 x:23:83 am
select to_date('13/54/2020 x:23:83 am', 'mm/dd/yyyy hh:mi:ss am') result from dual
               *
ERROR at line 1:
ORA-01843: not a valid month


SQL>

所以:如果转换有效,那么格式就可以了。否则,你输入了一些愚蠢的东西,转换不会通过。这样的代码可以用作返回例如布尔值的函数。


推荐阅读