2015-12-26 1 views
-1

Я изучаю Оракул 11g. Мне нужно создать столбцы для хранения год и месяц в следующем примере формате:Какие типы данных верны для хранения ввода числового года и числового месяца в Oracle?

  • Год выпуска: 2015
  • месяц: 6

Я видел тип данных Дата Время, которое занимает всю дату только .Также Тип номера может указывать недопустимый год и месяц. Но я хочу, чтобы они были в данной форме, избегая недействительных месяцев и года. Скажите, пожалуйста, как исправить это. Спасибо

Обновления: это нормально для таких входов?

CREATE TABLE FOOBAR (YYYY DATE, MM DATE); 
+1

U se тип данных 'datetime' - выполненная работа –

+0

@Ed Heal thanks. вы уверены. Я видел, что формат формата datetime для строки '11 -Nov-1999 '- «DD-Mon-YYYY» – user5005768

+0

И вопрос в том, что? –

ответ

3

Лучшее решение - хранить даты в столбцах DATE. У Oracle есть довольно аккуратные функции даты, и вам будет легко работать с сохранением первого числа месяца в одном столбце DATE. В противном случае вы будете постоянно извлекать элементы из других дат или загромождать свой код с помощью вызовов TO_CHAR() и TO_DATE(). Find out more.

Однако, если у вас есть жесткое требование, вы можете использовать строгую типизацию и проверочные ограничения, чтобы избежать недопустимых месяцев:

CREATE TABLE FOOBAR (
     YYYY number(4,0) not null 
     , MM number(2,0) not null 
     , constraint foobar_yyyy_ck check (yyyy != 0) 
     , constraint foobar_mm_ck check (mm between 1 and 12) 
    ); 

Это не будет делать то, что вы хотите, потому что он будет по умолчанию недостающих элементов:

CREATE TABLE FOOBAR (YYYY DATE, MM DATE); 

Мы не можем хранить только год или месяц в столбцах DATE.

+0

спасибо за четкое объяснение. – user5005768

+0

Вы также можете сделать ограничение на DATE: 'CHECK (TRUNC (COLUMN_NAME, 'IW') = COLUMN_NAME))' –

+0

@WernfriedDomscheit - мммм, да, мы можем, но с какой целью? – APC

2

Используйте тип DATE данных ..

и когда выполняет операцию вставки на свой дб .. использовать

TO_DATE ('November 13, 1992', 'MONTH DD, YYYY')

Для ввода и вывода даты, стандартный формат Oracle даты DD-MON-YY, следующим образом:

'13-NOV-92'

выполнить вставку работы/запрос, как это:

INSERT INTO table_name (name, created_at) VALUES ('ANDY', TO_DATE ('November 13, 1992', 'MONTH DD, YYYY'));

Вот ссылка на руководство, а также: https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i1847

Если вы хотите сохранить месяц и год отдельно в БД вы можете использовать NUMBER & NUMBER(n) https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i22289

Надеется, что это помогает ..