J'essaie de l'afficher pour afficher le nombre d'employés embauchés après le 20 juin 1994. Cependant, une erreur s'affiche indiquant "Identifiant invalide de JUN". Aidez-moi, merci!
Select employee_id, count(*)
From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > 31-DEC-95;
_31-DEC-95
_ n'est pas une chaîne, ni _20-JUN-94
_. Ce sont des chiffres avec des trucs supplémentaires ajoutés à la fin. Cela devrait être _'31-DEC-95'
_ ou _'20-JUN-94'
_ - notez le guillemet simple, _'
_. Cela vous permettra de faire une comparaison de chaîne.
Cependant, vous ne faites pas de comparaison de chaîne; vous effectuez une comparaison de date . Vous devriez transformer votre chaîne en date. Soit en utilisant la fonction intégrée TO_DATE()
, ou un littéral de date .
_select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
_
Cette méthode a quelques pièges inutiles
DEC
ne signifie pas nécessairement décembre. Cela dépend de vos NLS_DATE_LANGUAGE
et NLS_DATE_FORMAT
paramètres. Pour vous assurer que votre comparaison avec les paramètres régionaux fonctionne, vous pouvez utiliser le modèle de format de date/heureMM
à la place._select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
_
Un littéral de date fait partie de la norme ANSI, ce qui signifie que vous n'avez pas à utiliser une fonction spécifique à Oracle. Lorsque vous utilisez un littéral, vous devez spécifier votre date au format _YYYY-MM-DD
_ et vous ne pouvez pas inclure d'élément time.
_select employee_id
from employee
where employee_date_hired > date '1995-12-31'
_
N'oubliez pas que le type de données de date Oracle inclut un élément heure, de sorte que la date sans partie heure est équivalente à _1995-12-31 00:00:00
_.
Si vous souhaitez inclure une partie heure, vous devez utiliser un littéral timestamp, qui prend la forme _YYYY-MM-DD HH24:MI:SS[.FF0-9]
_
_select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
_
NLS_DATE_LANGUAGE
est dérivé de NLS_LANGUAGE
et NLS_DATE_FORMAT
est dérivé de NLS_TERRITORY
. Ceux-ci sont définis lors de la création initiale de la base de données, mais vous pouvez les modifier en modifiant votre fichier de paramètres d'inialisation - uniquement si cela est vraiment nécessaire - ou au niveau de la session à l'aide de la syntaxe ALTER SESSION
. Par exemple:
_alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
_
Ça signifie:
DD
jour numérique du mois, du 1 au 31MM
mois numérique de l'année, 01-12 (janvier est 01)YYYY
Année à 4 chiffres - À mon avis, cette valeur est toujours meilleure qu'une année à 2 chiffres YY
car il n'y a pas de confusion avec De quel siècle parlez-vous?.HH24
_ heure du jour, 0 - 23MI
minute de l'heure, 0 - 59SS
seconde de la minute, 0-59Vous pouvez connaître votre langue et vos paramètres de langue actuels en interrogeant _V$NLS_PARAMETERSs
_ et toute la gamme des valeurs valides en interrogeant _V$NLS_VALID_VALUES
_.
Incidemment, si vous voulez la count(*)
vous devez grouper par _employee_id
_
_select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
_
Cela vous donne le nombre par _employee_id
_.
Conclusion,
to_char
fonctionne à sa manière
Alors,
Utilisez toujours ce format AAAA-MM-JJ pour la comparaison au lieu de MM-JJ-AA ou JJ-MM-AAAA ou tout autre format.
Vous pouvez utiliser trunc et to_date comme suit:
select TO_CHAR (g.FECHA, 'DD-MM-YYYY HH24:MI:SS') fecha_salida, g.NUMERO_GUIA, g.BOD_ORIGEN, g.TIPO_GUIA, dg.DOC_NUMERO, dg.*
from ils_det_guia dg, ils_guia g
where dg.NUMERO_GUIA = g.NUMERO_GUIA and dg.TIPO_GUIA = g.TIPO_GUIA and dg.BOD_ORIGEN = g.BOD_ORIGEN
and dg.LAB_CODIGO = 56
and trunc(g.FECHA) > to_date('01/02/15','DD/MM/YY')
order by g.FECHA;
de votre requête:
Select employee_id, count(*) From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > '31-DEC-95'
je pense que ce n'est pas pour afficher le nombre d'employés embauchés après le 20 juin 1994. Si vous voulez afficher le nombre d'employés, vous pouvez utiliser:
Select count(*) From Employee
Where to_char(employee_date_hired, 'YYYMMMDDD') > 19940620
Je pense que la meilleure pratique pour comparer les dates que vous pouvez utiliser:
employee_date_hired > TO_DATE('20-06-1994', 'DD-MM-YYYY');
or
to_char(employee_date_hired, 'YYYMMMDDD') > 19940620;