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
您不必分别担心 date
和 time
部分。 DATE
数据类型将包含这两个部分,您只需使用 to_char
和适当的 format model
。
因此,您可以将列设置为 -
visit_hours DATE
Edit 正如 Jeffrey 和 Ben 所说,当数据类型为 DATE
时不需要约束。按照我上面的解释就行了。
您不需要任何约束 - 只需使用 DATE
数据类型,它也存储时间值。您的应用程序可以使用 TO_CHAR(visit_hours, 'HH24:MI')
提取时间并忽略日期部分和秒部分。
我如何做一个约束来检查不同范围内的前两个值和后两个值?我必须将时间放入数据库,但我不需要数据,这就是我不想使用 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
您不必分别担心 date
和 time
部分。 DATE
数据类型将包含这两个部分,您只需使用 to_char
和适当的 format model
。
因此,您可以将列设置为 -
visit_hours DATE
Edit 正如 Jeffrey 和 Ben 所说,当数据类型为 DATE
时不需要约束。按照我上面的解释就行了。
您不需要任何约束 - 只需使用 DATE
数据类型,它也存储时间值。您的应用程序可以使用 TO_CHAR(visit_hours, 'HH24:MI')
提取时间并忽略日期部分和秒部分。