我正在尝试将 C# DateTime 与存储过程中的 SQL 服务器 DateTime 进行比较,但它不断给我转换错误。
起初,其他人为此制作了 Oracle 函数:
'Select blabla from bla WHERE (TO_DATE (''' + cast(@dateEnd as varchar(50)) + ''',''yyyy/mm/dd'') >= SPOT_ENDDAT)
我正在尝试将其更改为 SQL,但在 SQL 中您没有 TO_DATE 函数。
有任何想法吗?还是我应该在我的 .net 程序本身级别进行更改?如果是,我该怎么办?
编辑:
使用此参数调用我的函数存储过程:
DateTime EndDate = DateTime.Today;
ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));
存储过程:
ALTER PROCEDURE dbo.uspGetValues
@EndDate = null;
AS
BEGIN
SET NOCOUNT ON;
DECLARE @SQL as NVARCHAR(4000)
Set @SQL = 'SELECT * FROM T_SPOTSHOP_DATA WHERE SPOT_ENDDATE IS NOT NULL'
if(@EndDate is not null)
Set @SQL = @SQL + 'AND (' + @EndDate +' <= SPOT_ENDDATE'
EXEC(@SQL)
编辑解决方案:
对于那些有同样问题的人,我以相反的方式解决了它。在 C# 中,我会使用:
DateTime EndDate = DateTime.Today.toString(yyyy-MM-dd);
ParamList.Add(new <class>.Parameter("EndDate", ParameterDirection.Input, EndDate, DbType.Date));
我在我的存储过程中赶上了它:
EndDate Varchar(50)
SET @SQL = @SQL + 'WHERE CONVERT(DATETIME, '''+ @EndDate +''', 121) >= SPOT_ENDDATE
这是一种非常丑陋的方法,但它确实有效。希望对各位有帮助!