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
"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
La solution la plus simple consiste à créer la colonne en utilisant le type de données correct: DATE
Par exemple:
Créer une table:
create table test_date (mydate date);
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