web-dev-qa-db-fra.com

Oracle Sql obtient uniquement le mois et l'année dans le type de données date

Je souhaite stocker uniquement le mois et l'année dans le type de données Oracle.

J'ai une date comme '01 -FEB-2010 'stockée dans une colonne appelée time_period.

Pour obtenir uniquement le mois et l'année, j'ai écrit une requête comme

select to_char(time_period,'MON-YYYY') from fact_table;

Je vais le résultat en tant que "FEB-2010", ce qui est bien, mais le seul problème est qu'il est dans le type de données varchar.

J'ai donc aimé

select to_date(to_char(time_period,'MON-YYYY'),'MON-YYYY') from fact_table

et je reçois 01-FEB-2010. N'est-il pas possible de stocker uniquement FEB-2010 dans le type de données date

12
Anand Sunderraman

"FEB-2010" n'est pas une date, il ne serait donc pas très logique de la stocker dans une colonne de date.

Vous pouvez toujours extraire la partie de chaîne dont vous avez besoin, dans votre cas "MON-YYYY" en utilisant la logique TO_CHAR que vous avez montrée ci-dessus.

S'il s'agit d'une table DIMENSION dans un environnement d'entrepôt de données et que vous souhaitez les inclure en tant que colonnes distinctes dans la table Dimension (en tant qu'attributs de données), vous devrez stocker le mois et l'année dans deux colonnes différentes, avec les types de données appropriés. .

Exemple..

Month varchar2(3) --Month code in Alpha..
Year  NUMBER      -- Year in number

or

Month number(2)    --Month Number in Year.
Year  NUMBER      -- Year in number
6
Rajesh Chamarthi

La solution la plus simple consiste à créer la colonne en utilisant le type de données correct: DATE

Par exemple:

  1. Créer une table:

    create table test_date (mydate date);

  2. Insérer une ligne:

    insérer dans les valeurs test_date (to_date ('01 -01-2011 ',' dd-mm-yyyy '));

Pour obtenir le mois et l'année, procédez comme suit:

select to_char(mydate, 'MM-YYYY') from test_date;

Votre résultat sera le suivant: 01-2011

Une autre fonction intéressante à utiliser est "EXTRAIT"

select extract(year from mydate) from test_date;

Cela reviendra: 2011

18
davidsr