我有一个简单的查询,我想把当前日期
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!
谢谢!
答案 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)