У меня есть start_date
и end_date
. Я хочу получить список дат между этими двумя датами. Может ли кто-нибудь помочь мне указать ошибку в моем запросе.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Вот Date
это datetime
переменная.
sql
sql-server
tsql
datetime
sql-server-2005
Neeraj
источник
источник
between
должны работать как положено.Поскольку у даты и времени без указанного временного сегмента будет значение
date 00:00:00.000
, если вы хотите быть уверенным, что вы получаете все даты в своем диапазоне, вы должны либо указать время для даты окончания, либо увеличить дату окончания и использовать<
.ИЛИ
ИЛИ
НЕ ИСПОЛЬЗУЙТЕ следующее, так как это может вернуть некоторые записи с 2011/02/28, если их время - 00: 00: 00.000.
источник
'2011/02/28 00:00:00.000'
?convert(date, Date) between '2011/02/25' and '2011/02/27'
(по крайней мере, с недавним MS SQL Server). Этаconvert()
часть позаботится об удалении части времени, и тогда сравнение между ними будет работать, как и ожидалось.Попробуй это:
Значения даты должны быть напечатаны в виде строк.
Чтобы обеспечить защиту вашего запроса для SQL Server 2008 и более
Date
поздних версий , его следует экранировать, поскольку в более поздних версиях это зарезервированное слово.Имейте в виду, что по умолчанию для дат без времени принимается полночь, поэтому у вас там может быть неправильное значение.
источник
Здесь сначала добавьте день к текущей конечной дате, это будет
2011-02-28 00:00:00
, а затем вычтите одну секунду, чтобы сделать конечную дату2011-02-27 23:59:59
. Делая это, вы можете получить все даты между заданными интервалами.источник
- если тип данных отличается
источник
Этот запрос подходит для извлечения значений между текущей датой и ее следующими 3 датами.
Это в конечном итоге добавит дополнительные 3 дня буфера к текущей дате.
источник
Это очень старый процесс, но учитывая большой опыт, который я имел с датами, вы можете подумать об этом: люди используют разные региональные настройки, поэтому некоторые люди (и некоторые базы данных / компьютеры, в зависимости от региональных настроек) могут читать это дата 11/12/2016 - 11 декабря 2016 года или 12 ноября 2016 года. Более того, 16/11/12, поставляемая в базу данных MySQL, будет внутренне преобразована в 12 ноября 2016 года, а база данных Access, работающая на компьютере с региональными настройками в Великобритании, будет интерпретировать и хранить его как 16 ноября 2012 года.
Поэтому я решил, что моя политика должна быть явной, когда я собираюсь взаимодействовать с датами и базами данных. Поэтому я всегда предоставляю свои запросы и программные коды следующим образом:
Также обратите внимание, что Access примет #, таким образом:
но MS SQL server не будет, поэтому я всегда использую «», как указано выше, что принимают обе базы данных.
И когда я получаю эту дату из переменной в коде, я всегда конвертирую результат в строку следующим образом:
Я пишу это, потому что я знаю, что иногда некоторые программисты могут быть недостаточно заинтересованы в обнаружении собственного преобразования. Для дат <13 ошибок не будет, просто разные результаты!
Что касается заданного вопроса, добавьте один день к последней дате и сделайте сравнение следующим образом:
источник
источник
Попробуйте поставить даты между # #, например:
Это сработало для меня.
источник
если его дата в 24 часа и начинается утром и заканчивается ночью, следует добавить что-то вроде:
источник
лучший запрос для выбранной даты между текущей датой и тремя днями назад :
лучший запрос для выбранной даты между текущей датой и следующими тремя днями :
источник
Проверьте ниже Примеры: как работающие, так и нерабочие.
ИЛИ
ИЛИ
И ниже не работает:
источник
мы можем использовать между ними, чтобы показать данные двух дат, но при этом будет выполнен поиск по всем данным и сравнение, что замедлит процесс обработки больших данных, поэтому я предлагаю всем использовать
datediff
:здесь calender - таблица, dt - переменная даты начала, а dt2 - переменная даты окончания.
источник
Мне нравится использовать синтаксис «1 MonthName 2015» для дат, например:
для свиданий
источник
Я бы пошел на
Логика заключается в том, что
>=
включает в себя всю дату начала и<
исключает дату окончания, поэтому мы добавляем одну единицу к дате окончания. Это может быть адаптировано для месяцев, например:источник
источник
Вы можете попробовать этот SQL
источник
На самом деле все даты sql должны быть в формате гггг-мм-дд для наиболее точных результатов.
источник
источник
лучше написать так:
источник
источник