如何将日期约束限制为仅允许用户在Oracle SQL中输入一周中某一天的日期
我已经被这个问题困扰了几天了,我通过google/stack overflow发现了许多不同的问题,但我一直无法解决 我需要创建一个允许用户输入约会日期的表,其中一个限制是输入的日期只能是星期一或星期五 下面是我的几次尝试,其中一些尝试的工作原理是允许我创建表,但当涉及到输入数据时,它会显示无效月份、无效数据类型或大量其他错误。(我还从下面的代码中删除了其他列,因为它们与问题无关) 我也试过了如何将日期约束限制为仅允许用户在Oracle SQL中输入一周中某一天的日期,sql,database,oracle,constraints,oracle-apex,Sql,Database,Oracle,Constraints,Oracle Apex,我已经被这个问题困扰了几天了,我通过google/stack overflow发现了许多不同的问题,但我一直无法解决 我需要创建一个允许用户输入约会日期的表,其中一个限制是输入的日期只能是星期一或星期五 下面是我的几次尝试,其中一些尝试的工作原理是允许我创建表,但当涉及到输入数据时,它会显示无效月份、无效数据类型或大量其他错误。(我还从下面的代码中删除了其他列,因为它们与问题无关) 我也试过了 CREATE TABLE t_appointments (appointment_id NUMBER(
CREATE TABLE t_appointments
(appointment_id NUMBER(10,0) CONSTRAINT appointments_appoint_id_pk PRIMARY KEY,
appoint_date DATE CONSTRAINT appointments_app_date_nn NOT NULL
CONSTRAINT appointments_app_date_ck CHECK (to_char(to_date(appoint_date,'DD-MM-YYYY'),'Day') IN ('Monday','Friday'));
非常感谢您的帮助。这是以下内容中的问题:
日期名称,用空格填充以显示此元素使用的日期语言中最宽日期名称的宽度
那么,试试这个:
CONSTRAINT appointments_app_date_ck CHECK (to_char(appoint_date, 'Day') IN ('Monday ', 'Friday '))
或者,您可以执行以下操作:
CONSTRAINT appointments_app_date_ck CHECK (to_char(appoint_date, 'D') IN ('2', '6'))
你使用MySQL还是Oracle?我在使用Oracle。你需要考虑Oracle的NLS参数吗?谢谢,我再次尝试了这个代码,它工作了,我是一个白痴,以错误的格式输入日期。或者<代码> toyChar(约会日期,'fMay')< /C> >删除尾随空格。此外,格式模型
'D'
取决于NLS_TERRITORY
设置,因此周一可能是1或2。最好使用指定日期in(trunc(指定日期,'iw')、trunc(指定日期,'iw')+4)
,因为ISO每周开始时间定义为周一。
CONSTRAINT appointments_app_date_ck CHECK (to_char(appoint_date, 'D') IN ('2', '6'))