用当前日期查询SQL

lex*_*eme 4 c# sql datetime sql-server-2008

我有一个简单的查询,我想把当前日期

var query = @"
    SELECT trainid, trainnum
    FROM trains 
    WHERE CONVERT(varchar(10), trainstartdate, 104)=" + 
    " " + 
    // so that matches the '104' format
    String.Format("{0:dd.MM.YYYY}", DateTime.Now) +                          
    " " +
    "ORDER BY trainnum";
Run Code Online (Sandbox Code Playgroud)

但是在运行时我收到错误消息:

Cannot call methods on numeric. .Net SqlClient Data Provider

如何以正确的方式指定当前日期?谢谢!

使用GETDATE()

影响: The conversion of a varchar data type to a datetime data type resulted in an out-of-range value

使用{0:dd.MM.yyyy}

影响: none

使用CONVERT(varchar(20),GetDate(),104)

影响: that works!

谢谢!

dkn*_*ack 9

描述

我不会转换为varchar并执行字符串比较.如果你trainstartdate使用>=和比较,性能要好得多<.

您可以使用该T-SQL getDate()方法获取当前日期.

getDate()返回当前日期时间.2012-02-14 14:51:08.350

DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))仅返回当前日期.`2012-02-14 00:00:00.000

DATEADD(dd,1,DATEDIFF(dd,0,GETDATE()))仅返回tomorow的日期.2012-02-15 00:00:00.000

样品

var query = @"
SELECT trainid, trainnum
FROM trains 
WHERE trainstartdate >=
-- today
DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
AND trainstartdate < 
-- tommorow
DATEADD(dd, 1, DATEDIFF(dd, 0, GETDATE()))
ORDER BY trainnum"
Run Code Online (Sandbox Code Playgroud)

注意: 如果您希望符合ANSI标准,CURRENT_TIMESTAMP会这样做.

更多信息