31-DEC-95não é uma corda, nem é 20-JUN-94. São números com algumas coisas extras adicionadas no final. Deve ser '31-DEC-95'ou '20-JUN-94'- observe as aspas simples ',. Isso permitirá que você faça uma comparação de cadeias.
No entanto, você não está fazendo uma comparação de cadeias; você está fazendo uma comparação de datas . Você deve transformar sua string em uma data. Ou usando a TO_DATE()função interna ou um literal de data .
ATÉ A PRESENTE DATA()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
Este método tem algumas armadilhas desnecessárias
- Como a_horse_with_no_name observou nos comentários,,
DECnão significa necessariamente dezembro. Depende das suas configurações NLS_DATE_LANGUAGEe NLS_DATE_FORMAT. Para garantir que a sua comparação com o trabalho em qualquer local que você pode usar o modelo de formato de data e hora MM em vez
- O ano de 95 é inexato. Você sabe que quer dizer 1995, mas e se fosse 50, são 1950 ou 2050? É sempre melhor ser explícito
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
Literais de data
Um literal de data faz parte do padrão ANSI, o que significa que você não precisa usar uma função específica do Oracle. Ao usar um literal, você deve especificar sua data no formato YYYY-MM-DDe não pode incluir um elemento de hora.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Lembre-se de que o tipo de dados de data do Oracle inclui um elemento de hora, portanto a data sem uma parte de hora é equivalente a 1995-12-31 00:00:00.
Se você deseja incluir uma parte do tempo, precisará usar um literal de carimbo de data / hora, que assume o formato YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
Outras informações
NLS_DATE_LANGUAGEé derivado de NLS_LANGUAGEe NLS_DATE_FORMATé derivado de NLS_TERRITORY. Eles são definidos quando você criou o banco de dados inicialmente, mas podem ser alterados alterando o arquivo de parâmetros de inicialização - somente se realmente necessário - ou no nível da sessão usando a ALTER SESSIONsintaxe. Por exemplo:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
Isso significa:
DD dia numérico do mês, 1 - 31
MM mês numérico do ano, 01 a 12 (janeiro é 01)
YYYYAno de 4 dígitos - na minha opinião, isso é sempre melhor do que um ano de 2 dígitos, YYpois não há confusão com o século a que você está se referindo.
HH24 hora do dia, 0 - 23
MI minuto da hora, 0 - 59
SS segundo, 0-59
Você pode descobrir suas configurações atuais de idioma e idioma de data consultando V$NLS_PARAMETERSse toda a gama de valores válidos consultando V$NLS_VALID_VALUES.
Leitura adicional
Aliás, se você quiser o count(*)que precisa agrupar poremployee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
Isso fornece a contagem por employee_id .
> <ouBETWEEN '' AND ''