yyyy to_date que mayor formato fechas fecha con comparar años 11g sql oracle

sql - que - formato fecha oracle to_date



Comparación de fechas en Oracle SQL (5)

Conclusión,

to_char funciona a su manera

Asi que,

Utilice siempre este formato AAAA-MM-DD para comparar en lugar de MM-DD-AA o DD-MM-AAAA o cualquier otro formato

Estoy tratando de que muestre el número de empleados contratados después del 20 de junio de 1994, pero recibo un error que dice "identificador inválido JUN." ¡Ayuda, gracias!

Select employee_id, count(*) From Employee Where to_char(employee_date_hired, ''DD-MON-YY'') > 31-DEC-95;


La comilla simple debe estar allí, desde la fecha convertida en carácter.

Select employee_id, count(*) From Employee Where to_char(employee_date_hired, ''DD-MON-YY'') > ''31-DEC-95'';


Puede usar trunc y to_date de la siguiente manera:

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 su consulta:

Select employee_id, count(*) From Employee Where to_char(employee_date_hired, ''DD-MON-YY'') > ''31-DEC-95''

Creo que no es la cantidad de empleados contratados después del 20 de junio de 1994. Si desea mostrar el número de empleados, puede usar:

Select count(*) From Employee Where to_char(employee_date_hired, ''YYYMMMDDD'') > 19940620

Creo que para obtener mejores prácticas, compare las fechas que puede usar:

employee_date_hired > TO_DATE(''20-06-1994'', ''DD-MM-YYYY''); or to_char(employee_date_hired, ''YYYMMMDDD'') > 19940620;


31-DEC-95 no es una cadena, ni es 20-JUN-94 . Son números con algunas cosas adicionales añadidas al final. Esto debería ser ''31-DEC-95'' o ''20-JUN-94'' - ''20-JUN-94'' la comilla simple, '' . Esto le permitirá hacer una comparación de cadenas.

Sin embargo, no estás haciendo una comparación de cadenas; estás haciendo una comparación de fecha . Deberías transformar tu cadena en una fecha. Ya sea mediante el uso de la función integrada TO_DATE() , o un literal de fecha .

HASTA LA FECHA()

select employee_id from employee where employee_date_hired > to_date(''31-DEC-95'',''DD-MON-YY'')

Este método tiene algunos inconvenientes innecesarios

  • Como a_horse_with_no_name anotado en los comentarios, DEC , no significa necesariamente diciembre. Depende de la configuración de NLS_DATE_LANGUAGE y NLS_DATE_FORMAT . Para asegurarse de que su comparación con el trabajo en cualquier localidad, puede usar el formato de fecha y hora del modelo MM
  • 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 especificar su 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, entonces deberá usar un literal de fecha y hora, 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 configuran cuando creó inicialmente la base de datos, pero se pueden modificar cambiando el archivo de parámetros de inicialización, solo si realmente se requiere, o en el nivel de sesión utilizando la sintaxis ALTER SESSION . Por ejemplo:

alter session set nls_date_format = ''DD.MM.YYYY HH24:MI:SS'';

Esto significa:

  • DD día numérico del mes, 1 - 31
  • MM mes numérico del año, 01 - 12 (enero es 01)
  • Año de 4 dígitos de YYYY : en mi opinión, esto siempre es mejor que un año YY 2 dígitos ya que no hay confusión con el siglo al que te refieres.
  • HH24 hora del día, 0 - 23
  • MI minuto de la hora, 0 - 59
  • SS segundo del minuto, 0-59

Puede averiguar su idioma actual y la configuración del idioma de la fecha al consultar V$NLS_PARAMETERSs y la gama completa de valores válidos al consultar V$NLS_VALID_VALUES .

Otras lecturas

Por cierto, si quieres count(*) necesitas 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 .