用当前日期查询SQL

时间:2012-02-14 09:37:13

标签: c# sql sql-server-2008 datetime

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

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";

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

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!

谢谢!

7 个答案:

答案 0 :(得分: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()))仅返回明天的日期。 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"

注意: 如果您想要符合ANSI标准, CURRENT_TIMESTAMP 也会这样做。

更多信息

答案 1 :(得分:2)

GETDATE()就是你所需要的......

答案 2 :(得分:2)

我认为

String.Format("{0:dd.MM.YYYY}", DateTime.Now);

返回带有点的日期,这使得SQL将其视为数字。

尝试使用

String.Format("{0:MM/dd/yyyy}", DateTime.Now);

代替/

答案 3 :(得分:2)

var query = @"
SELECT trainid, trainnum
FROM trains 
WHERE CONVERT(varchar(10), trainstartdate, 104)=
CONVERT(varchar(20), GetDate(), 104)
ORDER BY trainnum";

答案 4 :(得分:1)

将YYYY的格式模式更改为小写字母

{0:dd.MM.yyyy}

答案 5 :(得分:1)

你需要知道GETDATE()返回当前的日期和时间,而不仅仅是今天的日期。

如果要返回与今天日期匹配的行,则需要提取日期部分。有很多方法可以做到这一点 - 例如使用SQL Server 2008,您可以使用DATE数据类型,但是与早期版本的SQL Server一起使用的一种通用方法如下:

CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )

然后您可以使用查询:

SELECT trainid, trainnum   
FROM trains    
WHERE trainstartdate = CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )
如果您确定train.trainstartdate列中的日期/时间仅为日期(时间= 0),

将起作用。

如果trainstartdate包含开始日期/时间,您可以按如下方式获取所有今天的列车:

SELECT trainid, trainnum   
FROM trains    
WHERE trainstartdate >= CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) )
AND trainstartdate < DATEADD(dd,1, CONVERT(DATETIME, convert(VARCHAR(10),getdate(),101) ))

通过这样做而不是转换为字符串,您将利用trainstartdate列上可能存在的任何索引。

答案 6 :(得分:0)

试试这个.. YYYY应该是小写字母yyyy

String.Format("{0:dd.MM.yyyy}", DateTime.Now)