Yo, personalmente, casi siempre uso funciones definidas por el usuario por el para esto si se trata de SQL Server 2005 (o una versión inferior), sin embargo, debe tenerse en cuenta que existen inconvenientes específicos para usar UDF, especialmente si se aplican a las cláusulas WHERE (ver más abajo y los comentarios sobre esta respuesta para más detalles). Si usa SQL Server 2008 (o superior), consulte a continuación.
De hecho, para la mayoría de las bases de datos que creo, agrego estos UDF justo al comienzo, ya que sé que hay un 99% de posibilidades de que los necesite tarde o temprano.
Creo uno para "solo fecha" y "solo hora" (aunque el "solo fecha" es, con mucho, el más usado de los dos).
Aquí hay algunos enlaces a una variedad de UDF relacionados con la fecha:
Funciones esenciales de fecha, hora y fecha y hora de SQL Server
Obtener función solo de fecha
El último enlace muestra no menos de 3 formas diferentes de obtener la fecha solo como parte de un campo de fecha y hora y menciona algunos pros y contras de cada enfoque.
Si usa un UDF, debe tenerse en cuenta que debe intentar evitar usar el UDF como parte de una cláusula WHERE en una consulta, ya que esto dificultará en gran medida el rendimiento de la consulta. La razón principal de esto es que el uso de un UDF en una cláusula WHERE hace que esa cláusula sea no sargable , lo que significa que SQL Server ya no puede usar un índice con esa cláusula para mejorar la velocidad de ejecución de la consulta. Con referencia a mi propio uso de UDF, usaré con frecuencia la columna de fecha "sin procesar" dentro de la cláusula WHERE, pero aplicaré el UDF a la columna SELECTed. De esta forma, el UDF solo se aplica al conjunto de resultados filtrado y no a todas las filas de la tabla como parte del filtro.
Por supuesto, el mejor enfoque absoluto para esto es usar SQL Server 2008 (o superior) y separar sus fechas y horas , ya que el motor de base de datos de SQL Server proporciona de forma nativa los componentes de fecha y hora individuales, y puede consultarlos de manera eficiente de forma independiente sin la necesidad de un UDF u otro mecanismo para extraer la parte de fecha u hora de un tipo de fecha y hora compuesto.