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