minima insertar hora funciones formato fechas fecha current as400 actual sql db2

sql - hora - insertar fechas en db2



Conversión de fecha de DB2 (5)

Tengo 2 columnas INTEGER como las siguientes:

Month Year ----- ----- 5 2011

¿Hay alguna manera de convertir eso en una sola columna VARCHAR como esta: May-2011


Creo que esto lo hará:

SELECT MONTHNAME( DATE(CAST(Year AS CHAR(4)) || ''-'' || TRIM(CAST(Month AS CHAR(2))) || ''-1'') ) || ''-'' || CAST(Year AS CHAR(4)) FROM TABLE


No sé de una manera fácil de hacerlo ya que no tiene un objeto de fecha (es decir, no es como si estuviera buscando el mes de una marca de tiempo), puede usar una declaración de caso pero se alarga.

SELECT CASE Month WHEN ''1'' THEN ''January'' WHEN ''2'' THEN ''February'' WHEN ''3'' THEN ''March'' WHEN ''4'' THEN ''April'' ... END+''-''+Year FROM TABLE


Esto debería ser el truco, suponiendo que las columnas Month y Year son números enteros y Mes tiene el dominio 1-12:

select substring(''---JanFebMarAprMayJunJulAugSepOctNovDec'', 3*Month , 3 ) + ''-'' + right(digits(Year),4) from some_table

Si Month es 0 obtendrás ''---'' como mes; si es menor que 0 o mayor que 12, obtendrás algún tipo de bola.


Puede crear una función para convertir el valor del mes, así ...

CREATE FUNCTION INT2MONTH (MONTH INTEGER) RETURNS VARCHAR(100) LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC RETURN MONTHNAME(''2000-'' || RIGHT(''0'' || STRIP(CHAR(MONTH)), 2) || ''-01'')

Entonces tú puedes...

select int2month(month) || ''-'' || strip(char(year)) from test 1 -------------------------------------------------- May-2011 June-2011 December-2012

Si quieres un mes de 3 caracteres, cambia la última función de último minuto para ...

RETURN LEFT(MONTHNAME(''2000-'' || RIGHT(''0'' || STRIP(CHAR(MONTH)), 2) || ''-01''), 3)


Me doy cuenta de que esta pregunta es bastante antigua, pero hay una manera mucho más simple que cualquiera de las opciones enumeradas aquí (en mi opinión): una combinación de algunas funciones de matemática de fecha y VARCHAR_FORMAR() :

SELECT VARCHAR_FORMAT( DATE(''0001-01-01'') + (month_col - 1) MONTH + (year_col - 1) YEAR ,''Month-YYYY'' ) FROM your_table