Personalmente, uso quasi sempre le funzioni definite dall'utente per questo se ho a che fare con SQL Server 2005 (o versione precedente), tuttavia, va notato che ci sono degli svantaggi specifici nell'uso di UDF, specialmente se applicati alle clausole WHERE (vedi sotto e i commenti su questa risposta per ulteriori dettagli). Se si utilizza SQL Server 2008 (o versioni successive), vedere di seguito.
In effetti, per la maggior parte dei database che creo, aggiungo questi UDF proprio all'inizio, poiché so che prima o poi ne avrò bisogno al 99%.
Ne creo uno per "solo data" e "solo tempo" (anche se quello "solo data" è di gran lunga il più utilizzato dei due).
Ecco alcuni link a una varietà di UDF relativi alla data:
Funzioni essenziali per data, ora e data di SQL Server Funzione
get only date
L'ultimo link mostra non meno di 3 modi diversi per ottenere la data solo parte di un campo datetime e menziona alcuni pro e contro di ogni approccio.
Se si utilizza un UDF, si dovrebbe notare che si dovrebbe cercare di evitare di utilizzare l'UDF come parte di una clausola WHERE in una query poiché ciò ostacolerebbe notevolmente le prestazioni della query. Il motivo principale di ciò è che l'utilizzo di un UDF in una clausola WHERE rende tale clausola come non eseguibile , il che significa che SQL Server non può più utilizzare un indice con quella clausola al fine di migliorare la velocità di esecuzione della query. Con riferimento al mio uso personale di UDF, userò spesso la colonna della data "non elaborata" all'interno della clausola WHERE, ma applicherò l'UDF alla colonna SELECT. In questo modo, l'UDF viene applicato solo al set di risultati filtrati e non a tutte le righe della tabella come parte del filtro.
Naturalmente, l' approccio migliore in assoluto per questo è utilizzare SQL Server 2008 (o versioni successive) e separare le date e gli orari , poiché il motore di database di SQL Server fornisce quindi in modo nativo i singoli componenti di data e ora e può interrogarli in modo efficiente in modo indipendente senza la necessità di un UDF o altro meccanismo per estrarre la parte di data o ora da un tipo di data e ora composito.