type 如何僅從SQL Server DateTime數據類型返回日期




sql varchar to int (24)

SELECT GETDATE()

返回: 2008-09-22 15:24:13.790

我希望沒有時間部分的日期部分: 2008-09-22 00:00:00.000

我怎麼弄到的?


如果你需要結果varchar數據類型,你應該通過

SELECT CONVERT(DATE, GETDATE()) --2014-03-26
SELECT CONVERT(VARCHAR(10), GETDATE(), 111) --2014/03/26

這已經在上面提到過了

如果您需要日期和時間格式的結果,您應該通過以下任何查詢

1) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 111))作為唯一日期--2014-03-26 00:00:00.000

2) SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10), GETDATE(), 112)) as OnlyDate --2014-03-26 00:00:00.000

3)

 DECLARE  @OnlyDate DATETIME
   SET @OnlyDate = DATEDIFF(DD, 0, GETDATE())
   SELECT @OnlyDate AS OnlyDate

- 2014年4月26日00:00:00.000


 Convert(nvarchar(10), getdate(), 101) --->  5/12/14

 Convert(nvarchar(12), getdate(), 101) --->  5/12/2014

以日期格式返回

CAST(OrderDate AS日期)

上述代碼將在sql server 2010中工作

它將像12/12/2013一樣返回

對於SQL Server 2012,請使用下面的代碼

CONVERT(VARCHAR(10), OrderDate , 111)

這在所有答案中都是缺失的,可能不是最有效但很容易編寫和理解的,不需要任何風格,也沒有復雜的日期函數。

SELECT CONVERT(DATETIME,CONVERT(DATE,((GETDATE()))))

如果您將結果分配給列或變量,則將其賦予DATE類型,並且轉換是隱式的。

DECLARE @Date DATE = GETDATE()   

SELECT @Date   --> 2017-05-03

SELECT DATEADD(DD, DATEDIFF(DD, 0, GETDATE()), 0)

SELECT DATEADD(DAY, 0, DATEDIFF(DAY,0, GETDATE()))

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(10), GETDATE(), 101))

編輯:前兩個方法基本相同,並執行轉換為varchar方法。


SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),103) --21/09/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),101) --09/21/2011

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),111) --2011/09/21

SELECT CONVERT(VARCHAR,DATEADD(DAY,-1,GETDATE()),107) --Sep 21, 2011

要獲得所示的結果,我使用以下命令。

SELECT CONVERT(DATETIME,CONVERT(DATE,GETDATE()))

我認為它是有用的。


我贊成未提及的以下內容:

DATEFROMPARTS(DATEPART(yyyy, @mydatetime), DATEPART(mm, @mydatetime), DATEPART(dd, @mydatetime))

它也不關心本地或做雙重轉換 - 儘管每個'日期部分'可能是數學。 所以它可能比過時的方法慢一點,但對我來說更清楚。 特別是當我想按年和月分組時(將日期設置為1)。


為什麼不使用DATE_FORMAT(your_datetiem_column,'%d-%m-%Y')?

EX: select DATE_FORMAT( some_datetime_column, '%d-%m-%Y' ) from table_name

你可以通過重新安排'%d-%m-%Y'部分來改變m,d和年份的順序


在SQL Server 2000上

CAST(
(
    STR( YEAR( GETDATE() ) ) + '/' +
    STR( MONTH( GETDATE() ) ) + '/' +
    STR( DAY( GETDATE() ) )
)
AS DATETIME)

日期(日期和時間字段)DATE_FORMAT(日期和時間,'%Y-%m-%d') 都只返回日期和時間的日期


SELECT CONVERT(VARCHAR(10),GETDATE(),111)

如果使用SQL 2008及以上版本:

select cast(getdate() as date)

SQLServer 2008現在有一個'date'數據類型,它只包含一個沒有時間分量的日期。 任何使用SQL Server 2008及更高版本的人都可以執行以下操作:

SELECT CONVERT(date, GETDATE())

DATEADD和DATEDIFF優於CONVERTing到varchar。 兩種查詢都有相同的執行計劃,但執行計劃主要是關於數據訪問策略,並不總是顯示執行所有部分所花的CPU時間中涉及的隱含成本。 如果兩個查詢都針對具有數百萬行的表運行,則使用DateDiff的CPU時間可能接近轉換CPU時間的1/3!

查看查詢的執行計劃:

set showplan_text on
GO 

DATEADD和DATEDIFF都將執行CONVERT_IMPLICIT。

儘管CONVERT解決方案比較簡單,但對於某些人來說更容易閱讀,但速度較慢。 沒有必要轉換回日期時間(這是由服務器隱式完成的)。 之後DateData方法中也沒有真正的需要,因為整數結果也會隱式轉換回日期時間。

SELECT CONVERT(varchar,MyDate,101)FROM DatesTable

  |--Compute Scalar(DEFINE:([Expr1004]=CONVERT(varchar(30),[TEST].[dbo].[DatesTable].[MyDate],101)))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

SELECT DATEADD(dd,0,DATEDIFF(dd,0,MyDate))FROM DatesTable

  |--Compute Scalar(DEFINE:([Expr1004]=dateadd(day,(0),CONVERT_IMPLICIT(datetime,datediff(day,'1900-01-01 00:00:00.000',CONVERT_IMPLICIT(datetime,[TEST].[dbo].[DatesTable].[MyDate],0)),0))))
       |--Table Scan(OBJECT:([TEST].[dbo].[DatesTable]))

建議使用FLOOR()作為@digi的性能接近於DateDiff,但不建議將日期時間數據類型轉換為浮點數,並且返回並不總是產生原始值。

記住傢伙:不要相信任何人。 查看性能統計信息,並自行測試!

測試結果時要小心。 向客戶端選擇多行將隱藏性能差異,因為通過網絡發送行所需的時間比執行計算所需的時間更長。 因此,確保所有行的工作都由服務器完成,但沒有將行集發送到客戶端。

有些人對緩存優化何時影響查詢似乎存在困惑。 在同一批次或分批運行兩個查詢對緩存沒有影響。 因此,您可以手動過期緩存,或者只需多次來回查詢。 查詢#2的任何優化都會影響後續的任何查詢,因此如果您願意,可以拋出執行#1。

這裡是完整的測試腳本和性能結果 ,證明DateDiff比轉換為varchar快得多。


您可以使用以下日期部分並格式化日期:

DATENAME =>返回表示指定日期的指定日期部分的字符串

DATEADD => DATEPART()函數用於返回日期/時間的單個部分,如年,月,日,小時,分鐘等。

DATEPART =>返回一個表示指定日期的指定日期部分的整數。

CONVERT() => CONVERT()函數是將一種數據類型的表達式轉換為另一種數據類型的通用函數。 CONVERT()函數可用於以不同格式顯示日期/時間數據。


即使使用古老的MSSQL Server 7.0,這裡的代碼(可以通過這個link )讓我得到當時我想要的任何日期格式:

PRINT '1) Date/time in format MON DD YYYY HH:MI AM (OR PM): ' + CONVERT(CHAR(19),GETDATE())  
PRINT '2) Date/time in format MM-DD-YY: ' + CONVERT(CHAR(8),GETDATE(),10)  
PRINT '3) Date/time in format MM-DD-YYYY: ' + CONVERT(CHAR(10),GETDATE(),110) 
PRINT '4) Date/time in format DD MON YYYY: ' + CONVERT(CHAR(11),GETDATE(),106)
PRINT '5) Date/time in format DD MON YY: ' + CONVERT(CHAR(9),GETDATE(),6) 
PRINT '6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): ' + CONVERT(CHAR(24),GETDATE(),113)

它產生了這個輸出:

1) Date/time in format MON DD YYYY HH:MI AM (OR PM): Feb 27 2015  1:14PM
2) Date/time in format MM-DD-YY: 02-27-15
3) Date/time in format MM-DD-YYYY: 02-27-2015
4) Date/time in format DD MON YYYY: 27 Feb 2015
5) Date/time in format DD MON YY: 27 Feb 15
6) Date/time in format DD MON YYYY HH:MM:SS:MMM(24H): 27 Feb 2015 13:14:46:630

我認為這會適用於你的情況:

CONVERT(VARCHAR(10),Person.DateOfBirth,111) AS BirthDate
//here date is obtained as 1990/09/25

使用FLOOR() - 只需剪切時間部分。

SELECT CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME)

DECLARE @yourdate DATETIME = '11/1/2014 12:25pm'    
SELECT CONVERT(DATE, @yourdate)


SELECT * FROM tablename WHERE CAST ([my_date_time_var] AS DATE)= '8/5/2015'

日期:

SELECT CONVERT(date, GETDATE())
SELECT CAST(GETDATE() as date)

時間:

SELECT CONVERT(time , GETDATE() , 114)
SELECT CAST(GETDATE() as time)




datetime