SQL - Numeros a fecha

 
Vista:

Numeros a fecha

Publicado por Omar (2 intervenciones) el 08/01/2018 16:38:43
Buenas,

Tengo el siguiente problema, uno de los campos de la tabla aparece en formato "022016" y este lo deseo pasar a formato fecha 02-2016 para lograr segmentar la informacion. he utilizado las funciones Convert y Str_To_date y no me generan el resuiltado esperado.

Si me pueden ayudar seria de gran ayuda :D
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Numeros a fecha

Publicado por leonardo_josue (1173 intervenciones) el 08/01/2018 17:36:07
Hola Omar:

En primer lugar, deberías comenzar por decirnos con qué BD's estás trabajando, ya que cada una de ellas maneja una sintaxis distinta sobre todo con el manejo de fechas, mucho ojo para la próxima. En segunto lugar, es un terrible error de diseño utilizar campos tipo cadena para almacenar cosas que son tipo fecha. Las fechas siempre se deben guardar como FECHAS... Si a la hora de presentar los datos necesitas que no se muestre el DIA, como este es el caso, entonces utilizas las funciones para PRESENTAR el formato que tu quieras, pero el DATO COMO TAL no tiene por qué ser cadena. En otras palabras, si puedes cambiar tu tipo de dato HAZLO y evita dolores de cabeza.

Ahora bien, si no te es posible hacer el cambio de tipo de dato, entonces tienes un problema y es que 02-2016 en realidad no es un formato de fecha estándar, al menos en ninguno de los DBMS con los que he trabajado... cualquier formato de fecha debe tener DIA-MES-AÑO, con sus distintos "acomodos".

Sin embargo, si entiendo bien, en realidad no tienes por qué convertir tu cadena a FECHA para poder "segmentar" tu información. checa este ejemplo. Supongamos que tienes esta información:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> select * from tabla order by id;
+------+--------+
| id   | campo  |
+------+--------+
|    1 | 022016 |
|    2 | 022016 |
|    3 | 032016 |
|    4 | 022017 |
|    5 | 022017 |
|    6 | 022017 |
|    7 | 042016 |
+------+--------+
7 rows in set (0.05 sec)

entonces, tu podrías agrupar los valores usando directamente el valor de tu campo STRING:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT
    ->   campo,
    ->   COUNT(1) total
    -> FROM
    ->   tabla
    -> GROUP BY
    ->   campo
    -> ORDER BY id;
+--------+-------+
| campo  | total |
+--------+-------+
| 022016 |     2 |
| 032016 |     1 |
| 022017 |     3 |
| 042016 |     1 |
+--------+-------+
4 rows in set (0.00 sec)

también podrías utilizar las funciones SUBSTRING, para agrupar por mes o por año, si es que así lo necesitaras.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> SELECT
    ->   SUBSTRING(campo, 1, 2) mes,
    ->   SUBSTRING(campo, 3, 4) anio,
    ->   COUNT(1) total
    -> FROM
    ->   tabla
    -> GROUP BY
    ->   SUBSTRING(campo, 1, 2),
    ->   SUBSTRING(campo, 3, 4)
    -> ORDER BY id;
+------+------+-------+
| mes  | anio | total |
+------+------+-------+
| 02   | 2016 |     2 |
| 03   | 2016 |     1 |
| 02   | 2017 |     3 |
| 04   | 2016 |     1 |
+------+------+-------+
4 rows in set (0.00 sec)

En ambos casos estás agrupando SIN NECESIDAD DE CONTERTIR TU CADENA A FECHA. Si esto no te sirve, postea algunos datos de ejemplo de tu tabla y a partir de esos datos dinos qué es lo que esperas obtener como salida, así podremos indicarte alguna otra opción que pueda servirte.

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
0
Comentar

Numeros a fecha

Publicado por Omar (2 intervenciones) el 08/01/2018 18:50:57
Leonardo muchas gracias por la ayuda, para la proxima sere mas especifico
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