Luego, imaginemos que tenemos que mostrar estas tareas en una grilla… si nosotros hacemos una consulta para obtener todas las tareas, y las ordenamos por fecha de culminación… veremos desagradablemente que las tareas con fecha NULL se mostrarán primero que las demás… lo cual nos hace recordar que un NULL siempre es menor que un dato no NULL… ejemplo:
SELECT [taskid],[userid],[title],[progress],[duedate] FROM [dbo].[tm_task] ORDER BY [duedate] ASCY lógicamente no es lo que quisieramos obtener como resultado:
si hay tareas sin fecha definida, estas deberían ir al último (puede ser que tú pienses lo contrario, pero no discutamos).
Entonces, para lograr que las tareas con fecha NULL vayan al final, hacemos uso de COALESCE, elcual nos permite utilizar otro valor si es que el dato es NULL, algo así:
SELECT [taskid],[userid],[title],[progress],
COALESCE([duedate], aqui_pones_una_fecha_con_un_valor_alto) AS [duedate] FROM [dbo].[tm_task] ORDER BY [duedate] ASC
Simple no es cierto?
Obviamente no sólo funciona para fechas, también lo puedes usar para números, cadenas, etc.
Espero que les sea de utilidad ;)
2 comentarios:
Hola, interesante función, yo no la conocía, siendo que este problema lo resuelvo mediente el simple select case, ya que mi aplicacion debe correr en sql 2000 tambien.
select case CampoFecha when null then '3000/12/31' else CampoFecha end as CampoF
sin embargo agradezco la información y los diversos posts con los que nos iluminas.
Un abrazo desde México.
Hola SergioE,
la función COALESCE también funciona en SQL SERVER 2000, además es recomendable usarla porque si más adelante vas a migrar tu bd a Oracle digamos, COALESCE también funcionará allí...
Saludos y gracias por tus palabras alentadoras.
Publicar un comentario