C# 如何在SQL Select语句中仅比较日期(无时间戳)

C# 如何在SQL Select语句中仅比较日期(无时间戳),c#,.net,sql,sql-server,C#,.net,Sql,Sql Server,我有一个SQL SELECT语句根据当前日期从表中选择记录。我想做的是比较没有时间戳的日期,因为时间不匹配。我只是喜欢约会 以下是我所拥有的: string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " + @"WHERE (Tp_Id = '" + tpid + "' AND Rec_Date = '" + DateTime.Now.ToShortDateString() + @"')"; 我遇到的问题是,如何仅从字段“

我有一个SQL SELECT语句根据当前日期从表中选择记录。我想做的是比较没有时间戳的日期,因为时间不匹配。我只是喜欢约会

以下是我所拥有的:

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
             @"WHERE (Tp_Id = '" + tpid + "' AND Rec_Date = '" + DateTime.Now.ToShortDateString() + @"')";  
我遇到的问题是,如何仅从字段“Rec_date”中获取日期?

如果您只关心日期部分,并且希望删除时间部分,请尝试使用
TRUNC(Rec_date)
。比如:

... "' AND TRUNC(Rec_Date) = '" + DateTime.Today...

(这在Oracle中起作用…它可能只是Oracle的东西…

如果您使用的是sql server 2008及更高版本,则可以执行以下操作:

select cast( getdate() as date)

你在使用什么数据库

看看mssql的DATEPART函数

一种稍微过时的方法是:

string SQL = "SELECT Trans_Set_Id FROM EDI10002 WHERE (Tp_Id = '" + tpid + "' AND CONVERT(varchar(10),Rec_Date, 101) = CONVERT(varchar(10), " + DateTime.Now.ToShortDateString() + ", 101))";
基本上是转换为MM/dd/YYYY,然后截断结尾

编辑: 与getdate()一起使用


以下内容应适用于所有版本的SQL Server,而不考虑记录日期的类型:

SELECT Trans_Set_Id 
FROM EDI10002 
WHERE Tp_Id = @tpid 
      AND (Rec_Date >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
           AND Rec_Date < DATEADD(day, DATEDIFF(day, 0, GETDATE()), 1))
选择Trans\u Set\u Id
来自EDI10002
其中Tp_Id=@tpid
和(Rec_Date>=DATEADD(day,DATEDIFF(day,0,GETDATE()),0)
和Rec_Date

使用
DATEADD(day,DATEDIFF(…),…)
获取特定一天的开始。这意味着,如果在
Rec\u Date
上定义了索引,则可以使用该索引检索请求的行。

首先,要摆脱使用字符串连接构建动态sql语句的习惯,需要使用参数化查询

其次,在您的示例中,您不需要从客户机提供日期,所有这些都可以在sql中完成

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
   @"WHERE (Tp_Id = @tpid" + 
   @" AND convert(varchar(10, Rec_Date, 121) = CONVERT(varchar(10), getdate(), 121) )";
或者如果您使用的是2008

string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
   @"WHERE (Tp_Id = @tpid" + 
   @" AND cast(Rec_Date as date) = cast(getdate() as date) )";

将@tpid作为paremter添加到sql命令中,就完成了。

当我这样做时,我会收到一个错误,说“TRUNC不是可识别的内置函数名”,我会在“Rec_Date”字段上使用cast函数吗?我将在哪里插入我的字段?@Grant-我收到错误消息:类型日期不是已定义的系统类型。哇,发生了什么事。
select@@version
的输出是什么?日期类型在foreverI之前没有出现过,我尝试过,但出现了一个错误消息:“CONVERT”名称在当前上下文中不存在您使用的SQL版本是什么?我有一个简单的输入错误,请立即尝试。仍然会出现相同的错误。出于某些原因,它不喜欢等式右侧的CONVERT函数。没有注意到这是一个vb函数,请重试,为什么不使用getdate()?您使用的SQL Server版本是什么?作为旁注,您能保证tpid始终是一个整数吗?(我想是的)使用SQLServer2005版本是不好的。看看这个链接,我想它有你想要的
string SQL = @"SELECT Trans_Set_Id FROM EDI10002 " +
   @"WHERE (Tp_Id = @tpid" + 
   @" AND cast(Rec_Date as date) = cast(getdate() as date) )";