Oracle SQL 检查约束 VARCHAR

Oracle SQL CHECK CONSTRAINT VARCHAR

我如何做一个约束来检查不同范围内的前两个值和后两个值?我必须将时间放入数据库,但我不需要数据,这就是我不想使用 DATETIME 类型的原因。我只需要一个 TIME,但据我所知,Oracle 中没有 TIME 数据类型。

我的专栏看起来像:

visit_hours VARCHAR(4) 

所以前2个字符是00到23,后2个字符是00到59,所以我可以存储从00:00到23:59的时间。

我该怎么做?我已经找到了类似正则表达式的东西,但我不知道如何在这个例子中实现它。

CONSTRAINT check_time CHECK (regexp_like(visit_hours, '?????') );

感谢任何帮助。

我可能会这样做

CONSTRAINT check_time CHECK( to_number( substr( visit_hours, 1, 2 ) ) BETWEEN 0 AND 23 AND
                             to_number( substr( visit_hours, 3, 2 ) ) BETWEEN 0 AND 59 );

substr( visit_hours, 1, 2 ) 给出字符串的前两个字符,substr( visit_hours, 3, 2 ) 给出第三个和第四个字符。使用 to_number 函数将两者都转换为数字,然后验证范围。

I have to put time in database, but i do not need a data, that's why I don't want to use DATETIME type

您不必分别担心 datetime 部分。 DATE 数据类型将包含这两个部分,您只需使用 to_char 和适当的 format model

因此,您可以将列设置为 -

visit_hours DATE

Edit 正如 Jeffrey 和 Ben 所说,当数据类型为 DATE 时不需要约束。按照我上面的解释就行了。

您不需要任何约束 - 只需使用 DATE 数据类型,它也存储时间值。您的应用程序可以使用 TO_CHAR(visit_hours, 'HH24:MI') 提取时间并忽略日期部分和秒部分。