У меня 2 даты (даты):
date1 = 2010-12-31 15: 13: 48.593 date2
= 2010-12-31 00: 00: 00.000
В тот же день, только в разное время. Сравнение date1 и date2 с использованием <= не работает из-за времени date1. Итак, date1 <= date2 неверно, но должно быть правдой. Могу я сравнить их, просто посмотрев на год, месяц и день, чтобы они были одинаковыми? Его SQL Server 2008.
Благодарность :)
sql-server
tsql
sql-server-2008
date
Грейди
источник
источник
Ответы:
SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) ...
Должен делать то, что тебе нужно.
Прецедент
WITH dates(date1, date2, date3, date4) AS (SELECT CAST('20101231 15:13:48.593' AS DATETIME), CAST('20101231 00:00:00.000' AS DATETIME), CAST('20101231 15:13:48.593' AS DATETIME), CAST('20101231 00:00:00.000' AS DATETIME)) SELECT CASE WHEN CAST(date1 AS DATE) <= CAST(date2 AS DATE) THEN 'Y' ELSE 'N' END AS COMPARISON_WITH_CAST, CASE WHEN date3 <= date4 THEN 'Y' ELSE 'N' END AS COMPARISON_WITHOUT_CAST FROM dates
Возврат
источник
DATE
тип не был доступен до SQL Server 2008.Используйте
DATEDIFF
функцию с датойday
.SELECT ... FROM ... WHERE DATEDIFF(day, date1, date2) >= 0
Обратите внимание: если вы хотите проверить это
date1
<=,date2
вам нужно это проверитьDATEDIFF(day, date1, date2) >= 0
или, в качестве альтернативы, вы можете протестироватьDATEDIFF(day, date2, date1) <= 0
.источник
date1
иdate2
; то есть количествоdate1
date2
Простое однострочное решение:
Вы можете попробовать другие варианты, кроме "dd".
источник
Попробуй это:
BEGIN declare @Date1 datetime declare @Date2 datetime declare @chkYear int declare @chkMonth int declare @chkDay int declare @chkHour int declare @chkMinute int declare @chkSecond int declare @chkMiliSecond int set @Date1='2010-12-31 15:13:48.593' set @Date2='2010-12-31 00:00:00.000' set @chkYear=datediff(yyyy,@Date1,@Date2) set @chkMonth=datediff(mm,@Date1,@Date2) set @chkDay=datediff(dd,@Date1,@Date2) set @chkHour=datediff(hh,@Date1,@Date2) set @chkMinute=datediff(mi,@Date1,@Date2) set @chkSecond=datediff(ss,@Date1,@Date2) set @chkMiliSecond=datediff(ms,@Date1,@Date2) if @chkYear=0 AND @chkMonth=0 AND @chkDay=0 AND @chkHour=0 AND @chkMinute=0 AND @chkSecond=0 AND @chkMiliSecond=0 Begin Print 'Both Date is Same' end else Begin Print 'Both Date is not Same' end End
источник
Я всегда использую DateDiff (day, date1, date2) для сравнения двух дат.
Оформить заказ в следующем примере. Просто скопируйте это и запустите на сервере Ms sql. Также попробуйте изменить дату с 31 декабря по 30 декабря и проверьте результат
BEGIN declare @firstDate datetime declare @secondDate datetime declare @chkDay int set @firstDate ='2010-12-31 15:13:48.593' set @secondDate ='2010-12-31 00:00:00.000' set @chkDay=Datediff(day,@firstDate ,@secondDate ) if @chkDay=0 Begin Print 'Date is Same' end else Begin Print 'Date is not Same' end End
источник