2017-05-22 31 views
3

我需要創建一個表格,其中列「ttime」的值可以在10:0022:00的範圍內。這裏的代碼:在SQL Developer中檢查列的約束條件

create table test ( 
    ttime date, 
    CONSTRAINT CHECK_ttime CHECK(ttime >= TO_DATE('10:00', 'HH24:MI') AND 
           ttime <= TO_DATE('22:00', 'HH24:MI')) 
); 

但是,當我創建這個表,出現錯誤:

ORA-02436:日期或系統變量CHECK 約束錯誤指定

如何我可以避免它嗎?有什麼問題?

回答

3

要強制執行此限制,您需要從ttime列中提取時間。將日期的時間部分(在此表示爲字符串文字'10:00')轉換爲值DATE數據類型時,日期部分默認爲當前月份和年份的第一天,因此TO_DATE('10:00', 'HH24:MI')將導致01/05/2017 10:00:00,並且您的條件變爲

ttime >= 01/05/2017 10:00:00 and ttime <= 01/05/2017 22:00:00 

注:ANDOR更換。 ttime不能小於某個值,同時大於相同的值。

話雖如此,作爲一個選項,你可以定義你的約束如下:

constraint t1_chk01 check (to_number(to_char(c1, 'HH24MI')) 
          between 1000 and 2200)