Ja osobiście prawie zawsze korzystam z funkcji zdefiniowanych przez użytkownika do tego przez użytkownika, jeśli mamy do czynienia z SQL Server 2005 (lub niższą wersją), należy jednak zauważyć, że istnieją szczególne wady korzystania z UDF, szczególnie jeśli stosuje się je do klauzul WHERE (patrz poniżej i komentarze do tej odpowiedzi w celu uzyskania dalszych szczegółów). Jeśli używasz programu SQL Server 2008 (lub nowszego) - patrz poniżej.
W rzeczywistości dla większości baz danych, które tworzę, dodaję te UDF tuż przy początku, ponieważ wiem, że istnieje 99% szansa, że będę ich potrzebować wcześniej czy później.
Tworzę jeden dla „tylko daty” i „tylko czasu” (chociaż „tylko data” jest zdecydowanie najczęściej używanym z nich).
Oto kilka linków do różnych UDF związanych z datą:
Najważniejsze funkcje daty, godziny i daty i godziny w programie SQL Server
Uzyskaj funkcję tylko daty
Ten ostatni link pokazuje nie mniej niż 3 różne sposoby, aby data była tylko częścią pola daty i godziny, i wymienia niektóre zalety i wady każdego podejścia.
Jeśli używasz UDF, należy zauważyć, że powinieneś unikać używania UDF jako części klauzuli WHERE w zapytaniu, ponieważ to znacznie pogorszy wydajność zapytania. Głównym tego powodem jest to, że użycie UDF w klauzuli WHERE powoduje, że klauzula ta nie podlega wymianie , co oznacza, że SQL Server nie może już używać indeksu z tą klauzulą w celu poprawy szybkości wykonywania zapytania. Odnosząc się do własnego użycia UDF, często użyję kolumny „surowej” daty w klauzuli WHERE, ale zastosuję UDF do kolumny WYBRANE. W ten sposób UDF jest stosowany tylko do filtrowanego zestawu wyników, a nie do każdego wiersza tabeli jako część filtru.
Oczywiście absolutnie najlepszym podejściem do tego jest użycie programu SQL Server 2008 (lub nowszego) i oddzielenie dat i godzin , ponieważ silnik bazy danych SQL Server natywnie dostarcza poszczególne komponenty daty i godziny i może efektywnie sprawdzać je niezależnie bez potrzeby stosowania UDF lub innego mechanizmu do wyodrębnienia części daty lub godziny z typu złożonego typu data-godzina.