【发布时间】:2018-03-15 13:48:37
【问题描述】:
我正在尝试比较存储过程 sql 服务器中的两个日期时间变量。
在下面的代码中,sn-p @createdDate 被用作用户输入,然后与日期时间类型的列进行比较。我无法检查 ''='' 属性
set @sqlquery = 'Select
v.*,
vsc.vidhanSabhaConstituencyName, where 1=1 '
set @sqlquery = @sqlquery +'AND v.createdBy ='''+cast(@createdBy as nvarchar(100))+''''
if(@VoterIdNumber is not null)
set @sqlquery = @sqlquery+'AND v.voterIDNumber= '''+@VoterIdNumber+''''
if(@createdDate is not null)
set @sqlquery = @sqlquery+'AND v.dataIsCreated = '''+cast(@createdDate as varchar(100))+''''
else
set @sqlquery = @sqlquery+'AND v.dataIsCreated= '''+cast(getdate() as varchar(100))+''''
Execute sp_Executesql @sqlquery
我尝试过强制转换和转换 @createdDate 变量,但没有成功。
它适用于 >= 或 <= 等其他运算符,但不适用于 =。
感谢您的帮助
【问题讨论】:
-
可能不适用于
=,因为该值可能精确到秒?如果您不需要精确到秒,最好只使用日期部分。 -
你试过
PRINT @sqlquery;吗?这可能会让比赛没有发生的原因变得很明显。 -
使用
sp_executesql时,想法是将值作为参数传递,而不是连接所有内容;你应该做exec sp_executesql @sqlquery, N'@createdDate datetime, @createdBy nvarchar(200)', @createdDate, @createdBy;之类的事情,set @sqlquery = @sqlquery + 'AND v.createdBy = @createdBy '之类的事情 -
感谢您的输入 Marc ,但我需要连接字符串和值,因为需要检查许多值是否为空。当我尝试直接应用 '=' 时,出现以下错误“数据类型 nvarchar 和 date 在 add 运算符中不兼容。”
-
为什么要将 createdDate 转换为字符串?你应该将它从 c# 作为 DataTime 传递。您还需要将 DateTimes 转换为没有小时、分钟、秒(午夜)的日期,以便比较日期。
标签: c# asp.net sql-server-2008