SQL - Integer to date

   
Vista:

Integer to date

Publicado por Adrián (5 intervenciones) el 19/02/2018 12:34:38
Hola buenas, tengo una columna con numeros como: 20170110, 20180220
Los cuales representan fechas: 2017/01/10, 2018/02/20.


Como puedo pasar esos numero a formato fecha?

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Integer to date

Publicado por Leonardo Josué (1139 intervenciones) el 19/02/2018 15:34:03
Hola Adrian:

Aquí valdrían dos preguntas:

1. ¿con qué BD's estás trabajando? esto es muy importante porque cada DBMS maneja una sintaxis y funciones distintas sobre todo para el manejo de fechas, por lo tanto no es posible darte una respuesta puntual a tu pregunta.

2. ¿por qué diablos manejas una columna como enteros si vas a almacenar fechas? esto es un terrible error de diseño. Si vas a almacenar una fecha, entonces DEBES utilizar un campo tipo fecha y justamente te evitas dolores de cabeza y validaciones adicionales. En otras palabras, si tienes posibilidad de cambiar tu modelo, HAZLO.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Integer to date

Publicado por Adrián (5 intervenciones) el 19/02/2018 15:51:22
1. En Spark SQL estamos trabajando.
2. Los ficheros que se crean tienen ese formato nosotros no podemos cambiar el formato de dichas columnas, excepto haciendo transformaciones. Es un fastidio.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Integer to date

Publicado por Leonardo Josué (1139 intervenciones) el 19/02/2018 17:04:15
Hola Adrian:

Lamentablemente nunca he trabajado con Spark SQL, pero aquí te va una pequeña idea de cómo podrías hacerlo.

Primero, checas las funciones propias de Spark SQL para el manejo de fechas:

https://docs-snaplogic.atlassian.net/wiki/spaces/SD/pages/2458071/Date+Functions+and+Properties+Spark+SQL

Si observas, una de las funciones que te podría servir sería la función TO_DATE, sin embargo, esta función recibe una cadena en formato ANSI (YYYY-MM-DD), entonces, lo primero sería convertir tu número a una cadena con este formato.

Te pongo un ejemplo de cómo lo harías en MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT
    ->   campo,
    ->   CAST(campo AS CHAR) campo_texto,
    ->   SUBSTRING(CAST(campo AS CHAR), 1, 4) anio,
    ->   SUBSTRING(CAST(campo AS CHAR), 5, 2) mes,
    ->   SUBSTRING(CAST(campo AS CHAR), 7, 4) dia,
    ->   CONCAT( SUBSTRING(CAST(campo AS CHAR), 1, 4), '-',
    ->           SUBSTRING(CAST(campo AS CHAR), 5, 2), '-',
    ->           SUBSTRING(CAST(campo AS CHAR), 7, 4)
    ->         ) cadena_ansi
    -> FROM tabla;
+----------+-------------+------+------+------+-------------+
| campo    | campo_texto | anio | mes  | dia  | cadena_ansi |
+----------+-------------+------+------+------+-------------+
| 20170110 | 20170110    | 2017 | 01   | 10   | 2017-01-10  |
| 20180220 | 20180220    | 2018 | 02   | 20   | 2018-02-20  |
+----------+-------------+------+------+------+-------------+
2 rows in set (0.00 sec)

es decir, la idea es primero cambiar tu campo de ENTERO a CADENA y después utilizar la función SUBSTRING para ir extrayendo cada parte de la fecha por separado, para finalmente poder formar una cadena con el formato deseado.

La idea entonces sería que encontraras la equivalencia de esta funcionalidad en tu DBMS. Esto igual y no es la mejor forma de hacerlo, pero al menos te puede dar una ayuda en lo que quieres hacer.

Dale un vistazo y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Integer to date

Publicado por Adrián (5 intervenciones) el 21/02/2018 08:14:24
OH! Vale, Muchisimas Gracias! Gracias a tu código y con la ayuda de la pagina, se ha solucionado correctamente, me faltaban unos pequeñpos detalles para realizar la conversión! Ya esta todo solucionado.

Muchisimas Gracias! Buen día!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad