SQL запрос, чтобы сравнить даты в существующей таблице с выбранной датой? - PullRequest
0 голосов
/ 09 ноября 2010

Мне нужно сравнить даты в существующей таблице с выбранной датой на равенство. Я разрабатываю приложение asp.net, и я пытаюсь вставить новую запись в уже существующую таблицу, и я использую расширитель ajax в этой форме asp.net, где мне нужно сравнить выбранную дату с уже существующими датами, чтобы отображать записи, содержащие одинаковые даты, в виде таблицы еще до того, как я добавлю новую запись.

Ответы [ 4 ]

2 голосов
/ 09 ноября 2010

Если вас интересует только равенство в элементе DATE, игнорируя время, присутствующее в значении столбца, используйте следующее предложение:

DECLARE @DateParam DATETIME
SET @DateParam = '20101109'

SELECT SomeField
FROM SomeTable
WHERE DateField >= @DateParam AND DateField < DATEADD(dd, 1, @DateParam)

В этом примере будут найдены все записи, в которых столбец DateField содержит дату (и время) в любой точке указанного дня.

2 голосов
/ 09 ноября 2010

Я не совсем понимаю, где проблема ....

DECLARE @YourDate DATETIME
SET @YourDate = '2010-11-09'

SELECT (list of columns)
FROM dbo.YourTable
WHERE SomeDateColumn = @YourDate

Основная проблема, о которой вам нужно знать: в SQL Server до версии до версии 2005 у вас есть только тип данных DATETIME, который, как следует из его названия, хранит даты и . - так что точное совпадение будет совпадать с точностью до миллисекунды .... часто это не то, что вы действительно хотите.

Можете ли вы объяснить более подробно, чего вы пытаетесь достичь и в чем проблема?

1 голос
/ 09 ноября 2010

Я бы полностью согласился с решениями от marc_s и AdaTheDev (и их и моего понимания того, что вам нужно - вам нужно определить в своем вопросе, какая у вас выбранная дата)

Но при условии, что выбранный вами ввод является датой (как в других ответах) в формате гггг-мм-дд (marc_s) или ггггммдд (adathedev), следующая альтернатива также должна работать

DECLARE @Date DATETIME
SET @Date = '2010/10/10'

SELECT * 
FROM SomeTable
WHERE CONVERT(VARCHAR(10), DateField, 126) = @Date

Когда вы объявляете дату и время и устанавливаете его, используя только дату - время устанавливается в 12: 00: 00.000. Таким образом, с помощью оператора равенства он будет искать точное совпадение со временем (что весьма маловероятно, если вы вставляете в таблицу что-то вроде GETDATE ()).

Мое решение просто отнимает время у полей в базе данных при запросах. Но я бы все равно пошел с другими решениями. Это просто альтернатива.

+ 1 к другим парням.

0 голосов
/ 09 ноября 2010
...