【问题标题】:Oracle birthday column regex constrain violated违反 Oracle 生日列正则表达式约束
【发布时间】:2020-05-29 03:50:35
【问题描述】:

我希望数据库中的所有日期都采用以下 yyyy-mm-dd 日期格式。例如,“2020 年 5 月 28 日”。但这似乎不像我想的那样工作,当我将日期插入包含生日列的用户表中时。

这是我的生日列约束:

birthday DATE NOT NULL CHECK (REGEXP_LIKE(birthday , '\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])*')),

当我尝试插入时出现以下错误:“2020-05-28”或任何其他日期:

02290. 00000 -  "check constraint (%s.%s) violated"
*Cause:    The values being inserted do not satisfy the named check

*Action:   do not insert values that violate the constraint.

【问题讨论】:

    标签: sql oracle date oracle-sqldeveloper


    【解决方案1】:

    您错误地解释了DATE 数据类型的概念。您可能正在混合日期的显示格式(显示date 值时看到的值)及其内部表示

    date 就是这样:一个日期。它以某种特定于数据库的格式存储在内部,您无需担心。所以不需要检查约束来控制格式。

    当您需要显示日期时,您可以使用函数to_char()将其格式化为字符串,例如:

    to_char(birthday, 'yyyy-mm-dd')
    

    您还可以设置会话参数NLS_DATE_FORMAT,以便所有日期在显示时自动以给定格式格式化:

    alter session set nls_date_format = 'yyyy-mm-dd';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 1970-01-01
      • 2017-09-09
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多