2011-08-25 158 views
18

我有一個奇怪的情況,我已經採用了SQL Server 2008的一個實例。SQL Server 2008設置DateTime變量

據我所知,至少它可以做到奇怪的事情DateTime這不是我所期望的!無論我使用什麼日期格式,似乎都不想讓我設置DateTime變量。

當我執行:

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

我得到的輸出:

Jun 18 1905 12:00AM 

我有點TSQL小白,很抱歉,如果這是簡單的東西,但它讓我難倒!我敢肯定我錯過了一些非常明顯的東西...

我已經檢查了所有我能找到的區域設置&這一切看起來都沒問題。我也嘗試將DateTime設置爲各種文字替代方案,例如'15/02/2011','2011-02-15 00:00:00'等。

我很想學習更多關於這一點,所以請後,你覺得可以與你的答案:)

由於沿有幫助的任何鏈接

回答

23

你需要在引號中的日期時間值:

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15' 

PRINT @Test 
+1

如果您發佈的代碼,XML或數據樣本,** **請在高亮文本編輯器的線,然後點擊「代碼(編輯器)工具欄上的「樣本」按鈕(「{}」),以精確地格式化和語法突出顯示它! –

3

2011-01-15 = 2011-16 = 1995。這則隱含地從一個整數轉換爲日期,給你第一千九百九十五天,從1月1日1900年

開始你需要使用SET @test = '2011-02-15'

+0

很酷,謝謝Dems。以爲我在做一些愚蠢的事! – Bob

9

首先的 - 用你的周圍日期文字單引號!

其次,我強烈建議您始終使用ISO-8601日期格式 - 無論您的語言環境,區域或語言設置在SQL Server上如何,都可以使用。

ISO-8601 format可以是:

  • YYYYMMDD的日期僅(例如,對於八月25日20110825,2011)
  • YYYY-MM-DDTHH:MM:SS用於日期和時間(例如2011-08-25T14:15:00八月25日,14:15/2:15pm下午)
5

嘗試使用,而不是打印選擇

DECLARE @Test AS DATETIME 

SET @Test = '2011-02-15' 

Select @Test 
0

你應該試試這樣說:

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

只是爲了解釋:

2011-02-15是從字面上解釋爲數學運算,其答案是1994

然後,這被解釋爲自日期起源(1900年1月1日)起的1994天。

1994天= 5年,6個月,18天= 1905年6月18日

所以,如果你不想給你想要比較日期爲特定值使用標準每次計算:日期對象的toString()函數的值進行比較,以這樣的字符串:

set @TEST ='2011-02-05'