2015-06-19 66 views
0

我試圖用一個選擇查詢,以顯示前一天的日期的Sybase:顯示當前日期-1在Sybase

select dateadd(day,-1,convert(char(10), getdate(), 23)) 

此查詢顯示爲2015-06-18 00:00:00.0

我期望輸出爲2015-06-18

我該怎麼做?

回答

0

你告訴它給你hh:mm:ss,這就是你所得到的。

23轉換內部是yyyy-mm-ddTHH:mm:ss格式的代碼沒有代碼以獲取YYYY-MM-DD,你可以得到的最接近的是105(dd-mm-yy)或110(mm-yy-dd)。

如果您需要yyyy-mm-dd,那麼您必須將日期轉換爲字符串(char或varchar),並截斷不需要的部分。

Converting Datetime

0

嘛,datetime是二進制類型。它如何格式化以供顯示取決於您。

getdate()返回代表當前日期/時間的datetime。並且dateadd()返回一個datetimedate值,具體取決於它以什麼開始(在您的情況下,這將是datetime)。當您運行select語句時,它將使用爲Sybase實例配置的默認格式轉換爲字符串。因此你的結果。

概括地說,你是:

  • 轉換的datetime值CHAR(10),以獲得一個ISO 8601格式的日期字符串(yyyy-mm-dd)。
  • 轉換該datetime值(因此時間分量是開始的日)
  • 減去一天。

得到你想要的東西(昨天的日期),最簡單的方法是這樣的:

dateadd(day,-1, convert(date,getdate())) 

其中,格式化顯示時,會出來,就像這樣(取決於配置的默認格式的Sybase實例)yyyy-mm-dd

或者它可能會出現,如November 29, 2015。如果你想確保它是一個ISO 8601的日期表示,你需要明確它,並投它一charvarchar,即:

convert(char(10) , dateadd(day,-1, convert(date,getdate())) , 23) 

它給你留下包含昨天的日期char(10)值。

如果Sybase的版本不支持date,你就必須退回到你在做什麼,但這樣的事情:

convert(char(10) , dateadd(day,-1, getdate()) , 23) 
1

儘量選擇DATEADD(天,-1,轉換(日期,GETDATE(),365))

0

嘗試選擇轉換(CHAR(10),DATEADD(天,-1,GETDATE()),23)

DATEADD預計日期參數作爲第三個參數。在你的例子中,你給它一個char(10)。儘管Sybase支持Char-> DateTime的隱式轉換,但在這種情況下,我不會編碼依賴它。