【问题标题】:SQL: Not equal operator ProblemSQL:不等于运算符问题
【发布时间】:2011-04-27 19:29:50
【问题描述】:

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

代码:

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

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

【问题讨论】:

  • 任何不同的记录吗?
  • @Oded: +1, @OP: 请在 sql management studio 查询窗口中运行 select 查询,而不是 @StartDate 插入日期值(例如 '1/1/2011') ,验证您没有得到任何结果,然后向我们展示您希望在结果中包含的行中的 [ParkingStartDate] 字段值。如果您从查询中获得结果,那么问题与您的不等于运算符无关。

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


【解决方案1】:

如果以下任一情况为真,则不会返回任何内容:

  • StartDate1NULL
  • 所有值的ParkingStartDateNULL 或等于StartDate1(很明显)

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

【讨论】:

    【解决方案2】:

    如果值为空,你将不得不这样做

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

    【讨论】:

      【解决方案3】:

      首先停止使用那个 操作符。

      改用 !=(不等于)

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

      select '1' where NULL <> 0
      

      改为使用

      where columname != @startdate or columnname is null
      

      【讨论】:

      • != 不是标准的一部分。为什么要使用它?
      • @Doug:它说:功能与 (不等于)比较运算符相同。为什么停止使用标准运算符而使用非标准运算符?
      • INT(1) Date('April 4,2011') 怎么样?以简单的英语阅读该声明,这没有任何意义......另外,自 2001 年以来,我在每次比较中都使用了 != 并且我从来没有遇到过问题。
      • @Doug:现在你正在为这些词创造新的含义。制造虫子的人怎么称呼?哦,没关系。
      • @Doug:你是否意识到称他为开发人员会反驳你关于使用错误运算符的观点?
      【解决方案4】:

      在处理基于日期的查询时要考虑的一件重要事情是,SQL Server 中的日期被视为与您发送的日期一样精确。因此,如果您传入完整的日期/时间,例如 @987654321 @,它将返回所有 确切日期的日期。如果您正在寻找要选择的该日期的特定部分,则只需提供该日期的该部分。在这里使用DATEPART 命令也会有所帮助。

      【讨论】:

        【解决方案5】:

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

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

        希望对你有所帮助。

        【讨论】:

          【解决方案6】:

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

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

          希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-04
            • 2012-09-03
            • 2016-07-29
            • 2014-03-22
            • 2012-04-07
            • 2019-11-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多