簡體   English   中英

使用Convert()函數的T-SQL日期?

[英]T-SQL Dates using Convert() function?

我在這里有點困惑?

declare @date1 datetime = '2016-01-21 14:10:47.183'

我想將'2016-01-21 14:10:47.183''21-01-2016'

當我嘗試時: select convert(date,@date1,105)我正在: 2016-01-21

但隨着: select convert(varchar(10),@date1,105)我得到: 21-01-2016

為什么我的上述代碼沒有相同的結果?

為什么要轉換為varchar

提前致謝

這只是表示問題,應該在應用程序層中完成。 如果無法在應用程序中執行此操作,則可以使用FORMAT (SQL Server 2012+):

declare @date1 datetime = '2016-01-21 14:10:47.183'

SELECT FORMAT(@date1, 'dd-mm-yyyy');

LiveDemo


為什么我的上述代碼沒有相同的結果?

select convert(date,@date1,105)
-- DATETIME -> DATE
-- vs
select convert(varchar(10),@date1,105)
-- DATETIME -> VARCHAR(10) using specific style

如果僅跳過時間部分,請使用SELECT CAST(@date1 AS DATE)而不必理會它的顯示方式。 現在仍然是DATE

總結一下:在SQL查詢中,使用DATE作為日期,在應用程序中以所需的格式顯示它。

之所以這樣,是因為一旦在SQL Server中將一個值放入datetime列(或date或date-time數據類型中的任何其他變體)中。 SQL Server不再認為該日期具有任何特定格式。 它將其轉換為數字,並以內部方式進行存儲。

因此,當您從日期時間列中選擇一個日期時,SQL Server將根據您的環境/本地設置以默認格式顯示該日期。

如果要以任何其他格式顯示它,則必須首先將其轉換為字符串,因為就SQL Server而言,日期沒有格式。 它們只是數字。 3月21日是3月21日,無論您將其寫為3/21還是21/3。

因此,當您嘗試將日期轉換為具有其他格式的日期時,SQL Server只會忽略您,因為日期沒有格式。 但是,如果要將日期轉換為字符串,SQL Server將很樂意幫助您以所需的任何格式顯示該字符串。

希望這會有所幫助,但是聽起來像是對SQL Server存儲日期的方式進行進一步的研究將有助於您的理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM