[MSSQL] błąd podczas konwersji daty

0

Cześć, mam funkcje, która zwraca mi z datetime samą tylko datę(bez czasu):

CREATE FUNCTION [dbo].[get_date]
(
	@date datetime
)
RETURNS varchar(11)
AS
BEGIN
	DECLARE @Result datetime	
	SET @result = CONVERT(varchar(11),@date,101)	
	RETURN @Result
END

Analogicznie jest zrobiona funkcja zwracająca sam czas(bez daty) nazwana get_time.
I mam zapytanie:

SELECT cos_tam
FROM jakas_tabela e
order by dbo.get_date(e.nDate), dbo.get_time(e.nTime)

I dostaję błąd:
Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

Gdy pozbędę się z order by funkcji get_date(zostawiając samo get_time) to jest ok. Ale muszę mieć to get_date.

Jeśli chodzi o daty jakie są zwracane to nie ma w nich nic dziwnego.
Z jakiegoś powodu zapytanie, które jeszcze wczoraj chodziło, dzisiaj nie działa. Nie mam już siły, ani pomysłów. Wiecie, o co może chodzić?

0

Funkcja zwraca varchar(11) ale robisz DECLARE @Result datetime ? Nie kumam tego za bardzo.

0
johny_bravo napisał(a)

Funkcja zwraca varchar(11) ale robisz DECLARE @Result datetime ? Nie kumam tego za bardzo.

Shit! Dopiero teraz to zauważyłem. Dzięki.
A przy okazji, czemu w takim razie działało wcześniej?

0

Mnie nie pytaj :) Nie wiem :) Ja osobiscie uzylbym year(), month() i day() do zwrocenia daty, tak BTW, chociaz Twoj chyba lepszy :)

//edit
:) wiem - najwyrazniej nastepowala automatyczna konwersja z powrotem do datetime, wedlug ustalonego schematu, np. yyyy-mm-dd (nie pamietam, ktory jest domyslny) i w pewnym momencie daty przestaly pasowac, czyli 2007-10-10 jest ok, ale 2007-20-10 juz nie, mimo, ze wydaje sie sensowne dla czlowieka :)

0
johny_bravo napisał(a)

Mnie nie pytaj :) Nie wiem :) Ja osobiscie uzylbym year(), month() i day() do zwrocenia daty, tak BTW, chociaz Twoj chyba lepszy :)

Ale jak za pomocą tych funkcji zwrócisz całą datę w jednej kolumnie?
Tak bedzie bez czasu ale w trzech kolumnach:
SELECT YEAR(birth), MONTH(birth), DAY(birth) FROM member

A jak to samo uzyskac w jednej bez uzycia funkcji ?

0

Mozna posklejac w string recznie, albo uzyc convert/cast, albo konwertowac juz po stronie uzytkownika z datetime.

1 użytkowników online, w tym zalogowanych: 0, gości: 1