J'essaie de le faire afficher le nombre d'employés embauchés après le 20 juin 1994, mais j'obtiens une erreur disant "JUN" identifiant invalide. Veuillez aider, merci!
Select employee_id, count(*)
From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > 31-DEC-95;
> <
ouBETWEEN '' AND ''
Réponses:
31-DEC-95
n'est pas une chaîne, ni ne l'est20-JUN-94
. Ce sont des chiffres avec des éléments supplémentaires ajoutés à la fin. Cela devrait être'31-DEC-95'
ou'20-JUN-94'
- noter la citation unique'
. Cela vous permettra de faire une comparaison de chaînes.Cependant, vous ne faites pas de comparaison de chaînes; vous faites une comparaison de dates . Vous devez transformer votre chaîne en date. Soit en utilisant la
TO_DATE()
fonction intégrée, soit un littéral de date .À CE JOUR()
Cette méthode présente quelques pièges inutiles
DEC
, ne signifie pas nécessairement décembre. Cela dépend de vos paramètresNLS_DATE_LANGUAGE
etNLS_DATE_FORMAT
. Pour vous assurer que votre comparaison fonctionne dans tous les paramètres régionaux, vous pouvez utiliser le modèle de format datetime à laMM
placeLittéraux de date
Un littéral de date fait partie de la norme ANSI, ce qui signifie que vous n'avez pas besoin d'utiliser une fonction spécifique à Oracle. Lorsque vous utilisez un littéral, vous devez spécifier votre date dans le format
YYYY-MM-DD
et vous ne pouvez pas inclure d'élément d'heure.N'oubliez pas que le type de données de date Oracle inclut un élément d'heure, de sorte que la date sans partie d'heure équivaut à
1995-12-31 00:00:00
.Si vous souhaitez inclure une partie de l'heure, vous devez utiliser un littéral d'horodatage, qui prend le format
YYYY-MM-DD HH24:MI:SS[.FF0-9]
Informations complémentaires
NLS_DATE_LANGUAGE
est dérivéNLS_LANGUAGE
etNLS_DATE_FORMAT
dérivé deNLS_TERRITORY
. Celles-ci sont définies lors de la création initiale de la base de données, mais elles peuvent être modifiées en modifiant votre fichier de paramètres d'inialisation - uniquement si cela est vraiment nécessaire - ou au niveau de la session en utilisant laALTER SESSION
syntaxe. Par exemple:Ça signifie:
DD
jour numérique du mois, 1 - 31MM
mois numérique de l'année, 01-12 (janvier est 01)YYYY
Année à 4 chiffres - à mon avis, c'est toujours mieux qu'une année à 2 chiffresYY
car il n'y a aucune confusion avec le siècle auquel vous faites référence.HH24
heure de la journée, 0-23MI
minute de l'heure, 0 - 59SS
seconde de la minute, 0-59Vous pouvez trouver votre langue actuelle et vos paramètres de langue de date en interrogeant
V$NLS_PARAMETERSs
et la gamme complète des valeurs valides en interrogeantV$NLS_VALID_VALUES
.Lectures complémentaires
Incidemment, si vous voulez que
count(*)
vous ayez besoin de grouper paremployee_id
Cela vous donne le nombre par
employee_id
.la source
DEC
n'est pas nécessairement toujours un mois valide. Il est généralement préférable d'utiliser des nombres plutôt que des nomstimestamp
littéral au lieu d'undate
littéral:timestamp '2015-01-30 19:42:04'
(car dans ANSI SQL a ledate
type de données n'a pas d'heure, seul letimestamp
type de données en a).DATE 2016-04-01
moyens2016-04-01 00:00:00
. Et je pense que cette syntaxe fonctionne depuis Oracle 9i car c'est là que la syntaxe ANSI-SQL a été introduite dans Oracle.define
est une commande SQL * Plus qui remplace ce que vous avez défini dans toutes les variables de substitution portant ce nom .ALTER SESSION
est une déclaration qui vous permet de modifier certains paramètres ou paramètres de la base de données pour la durée de cette sessionConclusion,
to_char
fonctionne à sa manièreAlors,
Utilisez toujours ce format AAAA-MM-JJ pour la comparaison au lieu de MM-JJ-AA ou JJ-MM-AAAA ou tout autre format
la source
Vous pouvez utiliser trunc et to_date comme suit:
la source
à partir de votre requête:
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:
Je pense que pour comparer les dates, vous pouvez utiliser les meilleures pratiques:
la source
Le guillemet simple doit être présent, car la date est convertie en caractère.
la source