insert a konwersja datetime

0

Witam serdecznie!

Mam zapewne trywialny problem, ale jako początkujący użytkownik nie bardzo wiem, jak go rozwiązać.
Otóż tworzę tabelę, w której dwie kolumny są typu datetime. Z racji tego, że tabele będę wielokrotnie kasował, chciałbym móc wypełniać jej dane skryptem.

Przykładowo:

create table Naprawa
	(
		IdReklamacji			int				identity(1,1) primary key,
		Opis					nvarchar(255)	not null,
		Przyjeto				datetime		not null
	)
insert into Naprawa (Opis,Przyjeto) values ('Uszkodzenie','11-02-2016')

Oczywiście to nie działa, bo jest problem z konwersją, więc doszukałem się takiego triku:
select convert(datetime,'11-02-2016'))
Nie wiem jednak, jak wpleść go w skrypt. Czy moglibyście coś podpowiedzieć?

Pozdrawiam

0
 insert into Naprawa (Opis,Przyjeto) values ('Uszkodzenie',cast('11-02-2016' as datetime))

Aczkolwiek to co napisałeś wcześniej powinno działać prawidłowo i nie powinno być tam żadnego problemu z konwersją.
Szybki przykład typu "zaznacz i wykonaj":

create table #Naprawa
    (
        IdReklamacji            int             identity(1,1) primary key,
        Opis                    nvarchar(255)   not null,
        Przyjeto                datetime        not null
    )
insert into #Naprawa (Opis,Przyjeto) values ('Uszkodzenie','11-02-2016')
select * from #Naprawa
drop table #Naprawa
1
grzesiek51114 napisał(a):
create table #Naprawa
    (
        IdReklamacji            int             identity(1,1) primary key,
        Opis                    nvarchar(255)   not null,
        Przyjeto                datetime        not null
    )
insert into #Naprawa (Opis,Przyjeto) values ('Uszkodzenie','11-02-2016')
select * from #Naprawa
drop table #Naprawa

Dla daty 25-02-2016, walnie błedem:

Msg 242, Level 16, State 3, Line 7
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.

A to co podałes wstawi datę z listopada: 2016-11-02, pytanie czego oczekuje OP

select CAST('11-02-2016' AS datetime),convert(datetime,'11-02-2016',121)

Zwróci:
2016-11-02 0000.000 2016-11-02 0000.000

Najbezpieczniej jest stosować format ISO: YYYY-MM-DD

0

pytanie czego oczekuje OP no dokładnie. Błędu konwersji w moim przypadku też nie ma, a o to się rozchodziło.
No i fakt: zawsze YYYY-MM-DD jest najbezpieczniejszy.

0
Wybitny Ogrodnik napisał(a):

select convert(datetime,'11-02-2016'))
Nie wiem jednak, jak wpleść go w skrypt. Czy moglibyście coś podpowiedzieć?

insert into Naprawa (Opis,Przyjeto) values ('Uszkodzenie',convert(datetime,'11-02-2016'))
0

Niestety żaden z tych sposobów nie działa prawidłowo, bo w docelowym środowisku:

insert into Naprawa (IdKlienta,IdSprzetu,Serial,IdGwarancji,Opis,Przyjeto,Wydano,IdRozwiazania,OpisRozwiazania,Koszt,IdPracownika) values
(x,x,'x',x,'x',convert(datetime, '11-02-2016'),convert(datetime, '24-04-2016'),x,'x',x,x)

powoduje błąd:

Msg 242, Level 16, State 3, Line 22
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
The statement has been terminated.
0

24-04-2016 no, bo nie ma miesiąca o numerze 24. Najwidoczniej brany jest format MM-DD-YYYY. Zastosuj zapis YYYY-MM-DD lub konwertuj wg któregoś z tych przykładów: http://www.w3schools.com/sql/func_convert.asp Najlepiej format 112 czyli ISO.

1
insert into Naprawa (IdKlienta,IdSprzetu,Serial,IdGwarancji,Opis,Przyjeto,Wydano,IdRozwiazania,OpisRozwiazania,Koszt,IdPracownika) values
(x,x,'x',x,'x',convert(datetime, '11-02-2016',103),convert(datetime, '24-04-2016',103),x,'x',x,x)

https://msdn.microsoft.com/en-us/library/ms187928(v=sql.130).aspx

0

Faktycznie, moje niedopatrzenie, teraz jest prawidłowo :)
Bardzo dziękuję Wam za pomoc!

0

Można również w ten sposób spróbować

insert into Naprawa (Opis, Przyjeto) values ('Uszkodzenie','20161102')

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