我試圖用一個選擇查詢,以顯示前一天的日期的Sybase:顯示當前日期-1在Sybase
select dateadd(day,-1,convert(char(10), getdate(), 23))
此查詢顯示爲2015-06-18 00:00:00.0
我期望輸出爲2015-06-18
。
我該怎麼做?
我試圖用一個選擇查詢,以顯示前一天的日期的Sybase:顯示當前日期-1在Sybase
select dateadd(day,-1,convert(char(10), getdate(), 23))
此查詢顯示爲2015-06-18 00:00:00.0
我期望輸出爲2015-06-18
。
我該怎麼做?
你告訴它給你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),並截斷不需要的部分。
嘛,datetime
是二進制類型。它如何格式化以供顯示取決於您。
getdate()
返回代表當前日期/時間的datetime
。並且dateadd()
返回一個datetime
或date
值,具體取決於它以什麼開始(在您的情況下,這將是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的日期表示,你需要明確它,並投它一char
或varchar
,即:
convert(char(10) , dateadd(day,-1, convert(date,getdate())) , 23)
它給你留下包含昨天的日期char(10)
值。
如果Sybase的版本不支持date
,你就必須退回到你在做什麼,但這樣的事情:
convert(char(10) , dateadd(day,-1, getdate()) , 23)
儘量選擇DATEADD(天,-1,轉換(日期,GETDATE(),365))
嘗試選擇轉換(CHAR(10),DATEADD(天,-1,GETDATE()),23)
DATEADD預計日期參數作爲第三個參數。在你的例子中,你給它一個char(10)。儘管Sybase支持Char-> DateTime的隱式轉換,但在這種情況下,我不會編碼依賴它。