SQL: не равный оператор Проблема - PullRequest
3 голосов
/ 27 апреля 2011

Я использую оператор неравенства <> в своем выражении sql, но он не извлекает записи, которые не равны выбранной дате.

КОД:

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

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

Ответы [ 6 ]

3 голосов
/ 27 апреля 2011

Это ничего не вернет, если выполняется одно из следующих условий:

  • StartDate1 равно NULL
  • ParkingStartDate для всех значений равно NULL или равно StartDate1 (очевидный)

Проверьте, что вы передаете не NULL значение в StartDate1 и есть записи, удовлетворяющие вашему условию.

2 голосов
/ 27 апреля 2011

Если значения равны нулю, вам нужно будет сделать

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

 Command.Parameters.AddWithValue("@StartDate", StartDate1)
0 голосов
/ 24 ноября 2014

Рекомендую попробовать с оператором NULLIF.Измените ваш запрос так:

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

Надеюсь, это поможет.

0 голосов
/ 01 марта 2014

Если значение не определено, оно не включено в предложение <> или! =.Наряду с этим вы можете использовать функцию sql COALESCE () для включения строк, имеющих неопределенные ячейки.

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

Надеюсь, это поможет вам.

0 голосов
/ 27 апреля 2011

Одна важная вещь, которую следует учитывать при работе с запросами на основе даты, заключается в том, что дата в SQL Server обрабатывается так же точно, как и дата, которую вы отправляете. Поэтому, если вы передаете полную дату / время, например, 2011-10-24 14:35:29, он вернет все даты, которые не , что точная дата.Если вы ищете конкретную часть этой даты для выбора, вам нужно указать только эту часть даты.Здесь также поможет использование команды DATEPART.

0 голосов
/ 27 апреля 2011

Сначала прекратите использование этого оператора <>.

Используйте вместо этого! = (НЕ РАВНО)

запустить этот оператор в sql. он вернет ноль результатов. чтобы проиллюстрировать мою точку зрения.

select '1' where NULL <> 0

вместо этого используйте

where columname != @startdate or columnname is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...