2011-08-25 10 views
18

Mam trochę dziwne sytuacji na wystąpienie SQL Server 2008, które zostały przyjęte.Ustawienie SQL Server 2008 zmienna DateTime

O ile mogę powiedzieć, że robi dziwne rzeczy z DateTime, to przynajmniej nie robi tego, czego bym się spodziewał! Wygląda na to, że nie chcę ustawiać zmiennych, bez względu na to, jakiego formatu daty używam.

Kiedy wykonać:

DECLARE @Test AS DATETIME 
SET @Test = 2011-02-15 
PRINT @Test 

uzyskać moc:

Jun 18 1905 12:00AM 

jestem trochę noob TSQL, więc przepraszam, jeśli jest to coś prostego, ale ma mnie zakłopotany! Jestem pewien, że brakuje mi czegoś naprawdę oczywistego ...

Sprawdziłem wszystkie ustawienia regionalne, które mogę znaleźć & wszystko wydaje się w porządku. Próbowałem też ustawić DateTime na różne alternatywne wersje językowe, takie jak "15/02/2011", "2011-02-15 00:00:00" itd. Itp.

Chciałbym się uczyć więcej na ten temat, więc proszę pisać żadnych linków, które mogą być pomocne czują wraz ze swoimi odpowiedziami :)

Dzięki

Odpowiedz

23

trzeba ująć wartość czasu daty w cudzysłowach:

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15' 

PRINT @Test 
+1

Jeśli po próbki kodu, XML lub danych, ** ** Proszę zaznaczyć te linie w edytorze tekstowym i kliknij „kodu sample "button (' {} ') na pasku narzędzi edytora, aby ładnie sformatować i podświetlić składnię! –

3

2011-01-15 = 2011-16 = 1995. To jest następnie są niejawnie konwertowane z liczby całkowitej do tej pory, co daje 1995th dzień, począwszy od 1 Jan 1900

Trzeba użyć SET @test = '2011-02-15'

+0

Fajnie, dziękuję Dems. Myślałem, że robię coś głupiego! – Bob

9

Przede wszystkim - używać apostrofów wokół datę literałów!

Po drugie, zdecydowanie zaleca się zawsze stosowanie formatu daty ISO-8601 - działa to niezależnie od ustawień regionalnych, regionalnych lub językowych na serwerze SQL.

ISO-8601 format jest:

  • YYYYMMDD tylko dla dat (np 20110825 do 25 sierpnia 2011)
  • YYYY-MM-DDTHH:MM:SS dla dat i czasu (np2011-08-25T14:15:00 do 25 sierpnia, 14: 15/2: 15 pM po południu)
5

Spróbuj użyć wybierz zamiast Drukuj

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15' 

Select @Test 
0

powinieneś spróbować w ten sposób:

DECLARE @TEST DATE 
    SET @TEST = '05/09/2013' 
    PRINT @TEST 
0
1. I create new Date() and convert her in String . 
2. This string I set in insert. 

**Example:** insert into newDate(date_create) VALUES (?)"; 

... 
PreparedStatement ps = con.prepareStatement(CREATE)) 
     ps.setString(1, getData()); 
     ps.executeUpdate(); 
    ...} 

    private String getData() { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-dd hh:mm:ss"); 
    return sdf.format(new java.util.Date()); 
    } 

**It is very important format** = "yyyy-M-dd hh:mm:ss" 
2

Wystarczy, że wyjaśnisz:

2011-02-15 is interpretowane dosłownie jako operacja matematyczna, której odpowiedź brzmi: 1994.

To jest interpretowane jako 1994 dni od daty powstania (1 stycznia 1900).

1994 dzień = 5 lat, 6 miesięcy, 18 dni = 18-czerwiec 1905

Tak więc, jeśli nie chcesz do obliczenia za każdym razem chcesz porównać datę do określonej wartości użyciu standardu: porównać wartość funkcji toString() nieaktualne obiektu do łańcucha tak:

set @TEST ='2011-02-05' 
Powiązane problemy