31-DEC-95 no es una cadena, ni 20-JUN-94 . Son números con algunas cosas adicionales agregadas al final. Debería ser '31-DEC-95' o '20-JUN-94' - tenga en cuenta la comilla simple, ' . Esto le permitirá hacer una comparación de cadenas.
Sin embargo, no está haciendo una comparación de cadenas; estás haciendo una comparación de fechas . Debes transformar tu cadena en una fecha. Ya sea usando el TO_DATE() incorporado función, o un literal de fecha.
HASTA_FECHA()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
Este método tiene algunas trampas innecesarias
- Como se señaló en los comentarios a_horse_with_no_name,
DEC, no significa necesariamente diciembre. Depende de tuNLS_DATE_LANGUAGEyNLS_DATE_FORMATajustes. Para asegurarse de que su comparación funcione en cualquier configuración regional, puede usar el modelo de formato de fecha y horaMMen cambio - El año '95 es inexacto. Sabes que te refieres a 1995, pero ¿y si fuera '50, es 1950 o 2050? Siempre es mejor ser explícito
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
Literales de fecha
Un literal de fecha es parte del estándar ANSI, lo que significa que no tiene que usar una función específica de Oracle. Al usar un literal, debe especifica tu fecha en el formato YYYY-MM-DD y no puede incluir un elemento de tiempo.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Recuerde que el tipo de datos de fecha de Oracle incluye un elemento de tiempo, por lo que la fecha sin una porción de tiempo es equivalente a 1995-12-31 00:00:00 .
Si desea incluir una porción de tiempo, debe usar un literal de marca de tiempo, que toma el 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'
Más información
NLS_DATE_LANGUAGE se deriva de NLS_LANGUAGE y NLS_DATE_FORMAT se deriva de NLS_TERRITORY . Estos se establecen cuando creó inicialmente la base de datos, pero se pueden modificar cambiando el archivo de parámetros de inicialización, solo si es realmente necesario, o a nivel de sesión utilizando ALTER SESSION sintaxis. Por ejemplo:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
Esto significa:
DDdía numérico del mes, 1 - 31MMmes numérico del año, 01 - 12 ( enero es 01 )YYYYAño de 4 dígitos:en mi opinión, esto es siempre mejor que un año de 2 dígitosYYya que no hay confusión con el siglo al que te refieres.HH24hora del día, 0 - 23MIminuto de la hora, 0 - 59SSsegundo del minuto, 0-59
Puede averiguar su idioma actual y la configuración del idioma de la fecha consultando V$NLS_PARAMETERSs y la gama completa de valores válidos consultando V$NLS_VALID_VALUES .
Lecturas adicionales
- Modelos de formato
Por cierto, si desea el count(*) necesita agrupar por employee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
Esto le da el recuento por employee_id .