Serwer SQL może niejawnie przesyłać łańcuchy w postaci "RRRRMMDD" do datetime - wszystkie inne ciągi muszą być jawnie rzutowane. Oto dwa krótkie bloki kodu, który będzie wykonać konwersji z postaci, o której mówisz:
wersji 1 wykorzystuje zmienne jednostkowe:
BEGIN
DECLARE @input VARCHAR(8), @mon CHAR(2),
@day char(2), @year char(4), @output DATETIME
SET @input = '10022009' --today's date
SELECT @mon = LEFT(@input, 2), @day = SUBSTRING(@input, 3,2), @year = RIGHT(@input,4)
SELECT @output = @[email protected][email protected]
SELECT @output
END
wersja 2 nie używać zmiennych jednostkowych:
BEGIN
DECLARE @input CHAR(8), @output DATETIME
SET @input = '10022009' --today's date
SELECT @output = RIGHT(@input,4) + SUBSTRING(@input, 3,2) + LEFT(@input, 2)
SELECT @output
END
Oba przypadki polegają na możliwości serwera sql do wykonania tej niejawnej konwersji.
Czy tsql ma funkcję str_to_date, taką jak MySQL? http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date – dnagirl
OP chce mmddyyyy; select convert (datetime, "12312009") - >>> _ Msg 242, Level 16, State 3, Line 1 Konwersja typu danych char na typ danych datetime spowodowała przekroczenie zakresu datetime. –