从SQL Server GETDATE()函数中删除Datetime中的日期

时间:2015-06-19 11:17:12

标签: sql sql-server date datetime

我正在进行一个查询,无论时间如何都会获取当前日期的记录,如何在SQL Server上创建它?我的SQL Server版本不支持 DATE 进行转换。我想要一个像:

这样的格式
2013-06-20

所以例如我的查询是:

SELECT * FROM sometable where date = GETDATE();

GETDATE()的格式为 2015-06-19 19:12:10.953 。 我希望它在查询中 2015-06-19

感谢。

5 个答案:

答案 0 :(得分:4)

可以将查询表达为:

SELECT *
FROM sometable 
WHERE date = cast(GETDATE() as date);

然而,另一种表达方式是:

SELECT *
FROM sometable 
WHERE date >= cast(GETDATE() as date) and
      date < cast(dateadd(day, 1, GETDATE()) as date)

如果可以的话,这个版本可以保证使用适当的索引。

答案 1 :(得分:2)

CONVERT(VARCHAR, GETDATE(), 120)会将日期设为ISO格式,然后SUBSTRING将只获得日期部分:

SELECT * 
FROM sometable 
WHERE date = SUBSTRING(CONVERT(VARCHAR, GETDATE(), 120), 1, 10)

答案 2 :(得分:0)

请尝试以下

SELECT * FROM sometable where DATEDIFF(DAY, date,GETDATE())=0;

由于

答案 3 :(得分:0)

您可以尝试CAST:像这样:

SELECT CAST(GETDATE() AS DATE) 

SELECT CAST(date AS DATE) FROM UserMaster where date = GETDATE();

答案 4 :(得分:0)

由于您的sqlserver版本不支持DATE转换(您必须使用sqlserver 2005或更早版本),因此需要重新计算getdate()。

SELECT *
FROM
  sometable
WHERE
  date >= dateadd(d, datediff(d,0, GETDATE()), 0)
  and date < dateadd(d, datediff(d,0, GETDATE()), 1)

如果您的日期被声明为char(10)或类似,您只需使用where where子句:

WHERE date = convert(char(10), GETDATE(), 126)

这是将包含的间隔。不包括todate:

SELECT 
  dateadd(d, datediff(d,0, GETDATE()), 0) fromdate,
  dateadd(d, datediff(d,0, GETDATE()), 1) todate

结果:

fromdate                  todate
2015-06-19 00:00:00.000   2015-06-20 00:00:00.000