如何在SQL中选择没有时间的日期

Nee*_*raj 243 sql sql-server sql-server-2005

当我在SQL中选择日期时,它将返回为 2011-02-25 21:17:33.933.但我只需要Date部分2011-02-25.我怎样才能做到这一点?

小智 491

对于SQL Server 2008:

Convert(date, getdate())  
Run Code Online (Sandbox Code Playgroud)

请参考https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql

  • 这是因为人们来寻找他们问题的解决方案,而不是作者.因此,如果110人发现这对他们有用,我认为它有110个赞成票是公平的. (79认同)
  • 我不知道为什么这是一个如此受欢迎的答案.这个问题适用于SQL Server 2005,*NOT*2008. 2005没有`date`数据类型,因此将此解决方案呈现为无效. (32认同)
  • "DATE"在2008年是新的. (9认同)
  • 我得到"类型日期不是一个定义的系统类型." (4认同)

ber*_*d_k 142

我想他想要一根绳子

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)
Run Code Online (Sandbox Code Playgroud)


Ric*_*iwi 55

最快的是datediff,例如

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl
Run Code Online (Sandbox Code Playgroud)

但是如果你只需要使用该值,那么你可以跳过dateadd,例如

select ...
WHERE somedate <= datediff(d, 0, getdate())
Run Code Online (Sandbox Code Playgroud)

表达式datediff(d, 0, getdate())足以在没有时间部分的情况下返回今天的日期.


小智 37

使用适合我的CAST(GETDATE()作为日期),简单.

  • 这仅适用于SQL 2008及更高版本. (9认同)
  • 我将在哪里添加我的列名称?选择cast(getdate()作为日期,order_date)? (2认同)
  • @阿卜杜拉`CAST(order_date AS DATE)` (2认同)

Orb*_*bit 21

CAST(
        FLOOR( 
             CAST( GETDATE() AS FLOAT ) 
        )

AS DATETIME
)
Run Code Online (Sandbox Code Playgroud)

http://www.bennadel.com/blog/122-Getting-Only-the-Date-Part-of-a-Date-Time-Stamp-in-SQL-Server.htm

  • 这个页面上最优雅的答案. (2认同)

A.G*_*tam 12

你可以这样使用

SELECT Convert(varchar(10), GETDATE(),120) 
Run Code Online (Sandbox Code Playgroud)


小智 10

对于2008年旧版本:

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


nzr*_*tmn 8

我会使用DATEFROMPARTS函数。这非常简单,您不需要铸造。作为一个例子,这个查询:

Select  DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE())) as myNewDate
Run Code Online (Sandbox Code Playgroud)

将返回

2021-01-21

好的部分是,您还可以创建自己的日期,例如您想要一个月的第一天作为日期,而不是可以像下面这样使用:

Select  DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1) as myNewDate
Run Code Online (Sandbox Code Playgroud)

结果将是:

2021-01-01


Sim*_*nse 5

如果您需要时间为零,例如2018-01-17 00:00:00.000

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