Как сравнивать даты в sql
Перейти к содержимому

Как сравнивать даты в sql

  • автор:

Сравнение дат

но выдает ошибку. как сравнивать дату? и еще сразу вопрос как к переменной @date1 прибавить один день?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Сравнение дат
Подскажите, пожалуйста, как можно сравнивать даты. У меня в таблице с пациентами есть колонка Дата.

Сравнение дат в MSSQL7.0
Есть таблица в MSSQL, а в ней поле dt типа datettime. Выбираю данные например так: или так.

Сравнение двух дат и вывод дат находящихся между ними
Здравствуйте! Тут такое дело, вводятся две определенные ДАТЫ в Edit1 и Edit2 в формате.

Сравнение дат
Добрый день. Подскажите, пожалуйста код Есть уловие: в первом поле таблицы могут находится.

Как сравнить даты в c# vs

AddDays() и DateTime.Today — это метод и свойство языка C#, а вы пытаетесь их выполнить в запросе SQL. Это невозможно.

Есть несколько способов сделать ваш запрос.
Один уже был указан в комментариях: использовать функцию DATEADD T-SQL.
А вместо DateTime.Today можно использовать функцию GETDATE() T-SQL.

var sql = "select * from IRBook where DATEADD(day, 30, book_issue_date) > GETDATE() and book_return_date is null"; using SqlConnection con = new SqlConnection(_connectionString); using SqlCommand cmd = new SqlCommand(sql, con); using SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; 

Обратите внимание на using — это автоматически очистит ресурсы, даже в случае возникновения исключения.
Также я использовал DataTable вместо DataSet , ведь вам нужна всего одна таблица, а не набор таблиц.

У этого способа есть недостаток, который состоит в том, что функция DATEADD будет применяться к каждой строке таблицы. Если строк много (миллионы), то это ухудшит производительность.
Можно, наоборот, вычесть дни из GETDATE() , занеся результат в переменную и подставить её в запрос. Оставляю это вам.

Другой способ: высчитаем нужную дату на клиенте и подставим её в запрос в виде параметра.

var sql = "select * from IRBook where book_issue_date > @date and book_return_date is null"; using SqlConnection con = new SqlConnection(_connectionString); using SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add("date", SqlDbType.DateTime2).Value = DateTime.Today.AddDays(-30); using SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); dataGridView1.DataSource = dt; 

В параметре используйте точный тип SqlDbType . Я не знаю, какой именно тип у вас задан в БД.

Как сравнивать даты в sql

Строковый формат даты сравнивать недопустимо:

IF (‘15.05.2002’ > ‘31.03.2002’)
PRINT ‘Больше’
ELSE
PRINT ‘Меньше’

Выдает значение: ‘Меньше’

Сравнивать даты можно только в формате даты:

IF (CONVERT(DATETIME, CONVERT(varchar,GetDate(),104)) > CONVERT(DATETIME, ‘31.03.2002’))
PRINT ‘Больше’
ELSE
PRINT ‘Меньше’

Server: Msg 242, Level 16, State 3, Line 1
The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Меньше

Best wishes, Taras
Re: Как сравнивать даты в MS SQL

От: Toughpheeckouse
Дата: 15.05.02 06:00
Оценка: 2 (1)

Здравствуйте Good Man, Вы писали:

GM>Строковый формат даты сравнивать недопустимо:

GM>IF (‘15.05.2002’ > ‘31.03.2002’)
GM>PRINT ‘Больше’
GM>ELSE
GM>PRINT ‘Меньше’

GM>Выдает значение: ‘Меньше’

если он правильно записан, то допустимо

IF ( > ) PRINT 'Больше' ELSE PRINT 'Меньше'
ODBC defines escape sequences for date, time, and timestamp literals. The syntax of these escape sequences is as follows:   In BNF notation, the syntax is as follows: ODBC-date-time-escape ::= ODBC-date-escape | ODBC-time-escape | ODBC-timestamp-escape ODBC-date-escape ::= ODBC-esc-initiator d 'date-value' ODBC-esc-terminator ODBC-time-escape ::= ODBC-esc-initiator t 'time-value' ODBC-esc-terminator ODBC-timestamp-escape ::= ODBC-esc-initiator ts 'timestamp-value' ODBC-esc-terminator ODBC-esc-initiator ::= < ODBC-esc-terminator ::= >date-value ::= years-value date-separator months-value date-separator days-value time-value ::= hours-value time-separator minutes-value time-separator seconds-value timestamp-value ::= date-value timestamp-separator time-value date-separator ::= - time-separator ::= : timestamp-separator ::= (The blank character) years-value ::= digit digit digit digit months-value ::= digit digit days-value ::= digit digit hours-value ::= digit digit minutes-value ::= digit digit seconds-value ::= digit digit[.digit…]

Думайте сами, решайте сами.
Re: Как сравнивать даты в MS SQL

От: vav
Дата: 15.05.02 08:44
Оценка: 1 (1)

GM>Server: Msg 242, Level 16, State 3, Line 1
GM>The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

А как должен сервер понимать твою строку?
как ‘dd.mm.yyyy’, ‘mm.dd.yyyy’ или еще как-нибудь?

Если строка получается на клиенте, то рекомендую передавать параметры как datatime, а не как строку..

Если нужно иметь эту переменную на сервере, то
составь свою дату из кусочков используя DATEADD
(хотя можно конечно изменить строку на ‘03.31.2002’ и все заработает до первого изменения региональных настроек)

Re[2]: Как сравнивать даты в MS SQL

От: Good Man
Дата: 15.05.02 15:43
Оценка:

Где “ Date_update” типа DateTime.

Best wishes, Taras
Re: Как сравнивать даты в MS SQL

От: Sinclair https://github.com/evilguest/
Дата: 15.05.02 20:59
Оценка: 1 (1)

Здравствуйте Good Man, Вы писали:

GM>Строковый формат даты сравнивать недопустимо:

GM>IF (‘15.05.2002’ > ‘31.03.2002’)
GM>PRINT ‘Больше’
GM>ELSE
GM>PRINT ‘Меньше’

GM>Выдает значение: ‘Меньше’

вообще-то надо так:

IF GetDate() > CONVERT(DATETIME, '31.03.2002', 104)) PRINT 'Больше' ELSE PRINT 'Меньше'

GM>Возникает ошибка:

GM>Server: Msg 242, Level 16, State 3, Line 1
GM>The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
Логично, черт возьми. Он не может понять, как конвертить ‘31.03.2002’ в дату — надо указать стиль.

Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Как сравнивать даты в MS SQL

От: Good Man
Дата: 16.05.02 02:44
Оценка:

Здравствуйте Sinclair, Вы писали:

Какая выборка будет, производится быстрее в MS SQL 2000?

Предположим, что есть таблица «Table1». В таблице есть поле “DateField1” типа DateTime. Приведу два примера:

SELECT * FROM Table1
WHERE CONVERT(varchar, DateField1, 104) = ‘15.05.2002’

SELECT * FROM Table1
WHERE DateField1 = CONVERT(DATETIME, ‘2002-05-15 00:00:00’, 102)»;

В Access вообще нет необходимости заниматься конвертированием:

«…WHERE DateField1 = #05/15/02#…»

Конвертирование, при сравнении дат, должно сильно уменьшать скорость выборки данных в MS SQL 2000.

Best wishes, Taras
Re[3]: Как сравнивать даты в MS SQL

От: Sinclair https://github.com/evilguest/
Дата: 16.05.02 07:30
Оценка: 2 (1)

Здравствуйте Good Man, Вы писали:

GM>Здравствуйте Sinclair, Вы писали:

GM>Какая выборка будет, производится быстрее в MS SQL 2000?

GM>Предположим, что есть таблица «Table1». В таблице есть поле “DateField1” типа DateTime. Приведу два примера:

GM>Вариант 1:

GM>SELECT * FROM Table1
GM>WHERE CONVERT(varchar, DateField1, 104) = ‘15.05.2002’

GM>Вариант 2:

GM>SELECT * FROM Table1
GM>WHERE DateField1 = CONVERT(DATETIME, ‘2002-05-15 00:00:00’, 102)»;
Ясен пень — вариант 2 будет выполняться не медленнее, т.к. в нем преобразование выполняется лишь раз — в начале запроса. Использование непреобразованного значения поля позволяет оптимизировать запрос при помощи индексов. Суперумный сервер мог бы построить обратное преобразование в случае 1 и свести его к случаю 2. Например, запрос

select * from t2 where int_field*2+1 < 41

легко сводится к

select * from t2 where int_field < 20

Но я сииильно сомневаюсь, что преобразование даты в строку может быть так соптимизировано хотя бы одним из существующих серверов. Даже запросы типа

select * from t2 where int_field1+int_field2

и то выполняются фулл сканом.

GM>В Access вообще нет необходимости заниматься конвертированием:

GM>«…WHERE DateField1 = #05/15/02#…»

GM>Конвертирование, при сравнении дат, должно сильно уменьшать скорость выборки данных в MS SQL 2000.
Нет. Правильно эта фраза читается вот так:
Конвертирование при сравнении дат может сильно уменьшить скорость выполнения запроса в MS SQL 2000
Вариант 2, рассмотренный выше, выполняется не хуже, чем select * from t2 where int_field < 20.

Как сравнить две даты js

Чтобы сравнить даты, можно их преобразовать в объекты Date и сравнить обычным способом. Однако если даты одинаковые, то они не будут равны, так как сравнение идёт по ссылкам. Чтобы добиться корректного сравнения дат, можно использовать метод getTime() :

const firstDate = new Date('2022-03-15'); const secondDate = new Date('2022-03-13'); console.log(firstDate  secondDate); // false console.log(firstDate > secondDate); // true const equalDate1 = new Date('2022-03-13'); const equalDate2 = new Date('2022-03-13'); console.log(equalDate1.getTime() == equalDate2.getTime()); // true 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *