SQL:不等于运算符问题

时间:2011-04-27 19:29:50

标签: asp.net sql sql-server vb.net tsql

我在我的sql语句中使用了一个不等于运算符<>,但它没有检索任何不等于所选日期的记录。

CODE:

 Command = New SqlCommand("SELECT * FROM [Products] WHERE [ParkingStartDate] <> @StartDate", myConn)

 Command.Parameters.AddWithValue("@StartDate", StartDate1)

6 个答案:

答案 0 :(得分:3)

如果满足以下任一条件,则不会返回任何内容:

  • StartDate1NULL
  • 所有值的
  • ParkingStartDateNULL或等于StartDate1(显而易见的)

检查您是否在NULL中传递了非StartDate1值,并且有记录符合您的条件。

答案 1 :(得分:2)

如果值为null,则必须执行

Command = New SqlCommand("SELECT * FROM [Products] WHERE [ParkingStartDate] <> @StartDate OR ParkingStartDate is null", myConn)

 Command.Parameters.AddWithValue("@StartDate", StartDate1)

答案 2 :(得分:0)

首先停止使用&lt;&gt;操作

改为使用!=(NOT EQUAL)

在sql中运行此语句。它将返回零结果。说明我的观点。

select '1' where NULL <> 0

改为使用

where columname != @startdate or columnname is null

答案 3 :(得分:0)

在处理基于日期的查询时要考虑的一个重要事项是SQL Server中的日期被视为与您发送日期一样精确。因此,如果您传递完整的日期/时间,例如{{ 1}},它将返回 完全日期的所有日期。如果您要查找要选择的日期的特定部分,则只需提供该部分日期。使用2011-10-24 14:35:29命令也会有所帮助。

答案 4 :(得分:0)

如果值未定义,则不包含在&lt;&gt;中或!=子句。 除此之外,您还可以使用sql函数'COALESCE()'来包含具有未定义单元格的行。

   "SELECT * FROM [Products] WHERE COALESCE([ParkingStartDate],'') <> @StartDate OR ParkingStartDate is null"

希望它会对你有所帮助。

答案 5 :(得分:0)

我的建议是尝试使用NULLIF运算符。将您的查询修改为:

SELECT * FROM [Products] WHERE NULLIF([ParkingStartDate], @StartDate) IS NOT NULL  OR ParkingStartDate is NULL

希望这有帮助。