C# 在查询中比较C日期和SQL日期

C# 在查询中比较C日期和SQL日期,c#,sql-server,datetime,to-date,C#,Sql Server,Datetime,To Date,我试图在存储过程中比较C DateTime和SQL server DateTime,但它总是给我转换错误 起初,其他人为此开发了Oracle功能: 'Select blabla from bla WHERE (TO_DATE (''' + cast(@dateEnd as varchar(50)) + ''',''yyyy/mm/dd'') >= SPOT_ENDDAT) 我试图将其改为SQL,但在SQL中没有to_DATE函数 有什么想法吗?或者我应该在.net程序本身的级别进行更改

我试图在存储过程中比较C DateTime和SQL server DateTime,但它总是给我转换错误

起初,其他人为此开发了Oracle功能:

'Select blabla from bla WHERE (TO_DATE (''' + cast(@dateEnd as varchar(50)) + ''',''yyyy/mm/dd'') >= SPOT_ENDDAT) 
我试图将其改为SQL,但在SQL中没有to_DATE函数

有什么想法吗?或者我应该在.net程序本身的级别进行更改?如果是,我该怎么办

编辑:

使用此参数调用my function存储过程:

DateTime EndDate = DateTime.Today;

ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));
这是一个相当丑陋的方法,但它的工作。希望对你们有帮助

试试这个:

Select 
    blabla 
from 
bla 
 WHERE CAST(@dateEnd AS DATETIME) >= CAST(SPOT_ENDDAT AS DATETIME)

您可以使用CONVERT在T-SQL中执行转换,但我不会

我强烈建议尽量避免字符串转换。只需使用参数化SQL,并将参数指定为日期时间:

// Assuming dateEnd is a DateTime variable
string sql = "SELECT blabla FROM bla WHERE @dateEnd >= SPOT_ENDDAT";
using (var command = new SqlCommand(conn, sql))
{
    command.Parameters.Add("@dateEnd", SqlDbType.DateTime).Value = dateEnd;
    // Execute the command here
}
我也会为Oracle做同样的事情——除非您的任务本质上涉及文本和本机数据类型之间的转换,否则不要这样做


当然,也可以使用LINQ提供程序,此时您将有一个更可读的查询开始:

只需将.Net DateTime值作为参数传递给Sql命令即可。数据库驱动程序将自动处理到Sql Server日期时间的转换。

请记住,将C DateTime字符串的格式设置为与Sql Server中比较的相同格式。这就是我的问题,我如何获得相同的格式^^当我尝试此操作时,会出现以下错误:System.Data.SqlClient.SqlException:从字符串转换日期和/或时间时转换失败我很想这样做,但我使用的是数据提供程序,所以我使用的参数列表类似于:paramList.Addnew class.ParameterEndDate,Parameter.direction.Input,search.EndDate,DbType.Date;遗憾的是,我不能把SqlDbType放在那里,或者我不知道怎么放,我的英语很差databaseAccesses@Akorna:如果您使用的是DbType.Date,那么这可能就足够了-您至少没有将其转换为字符串。它仍然提供System.Data.SqlClient.SqlException:从字符串转换日期和/或时间时转换失败…因此出于某种原因,他一直在某处转换它转换成字符串?@Akorna:请提供完整的详细信息-包括用作值的变量的类型。目前我们没有足够的上下文。我编辑了这个问题,并提供了更详细的信息,说明了我目前正在尝试的内容
EndDate Varchar(50)

SET @SQL = @SQL + 'WHERE CONVERT(DATETIME, '''+ @EndDate +''', 121) >= SPOT_ENDDATE
Select 
    blabla 
from 
bla 
 WHERE CAST(@dateEnd AS DATETIME) >= CAST(SPOT_ENDDAT AS DATETIME)
// Assuming dateEnd is a DateTime variable
string sql = "SELECT blabla FROM bla WHERE @dateEnd >= SPOT_ENDDAT";
using (var command = new SqlCommand(conn, sql))
{
    command.Parameters.Add("@dateEnd", SqlDbType.DateTime).Value = dateEnd;
    // Execute the command here
}