Datetime уақытын sql серверінде салыстыру

Мен дерекқорға деректер қорын стандартты уақытша сақтау ретінде сақтаймын, 2011-10-19 17: 18: 44.083. Datetime өрісі бүгінгі күннен кейін 5 күн болса, барлық жолдарды таңдау керек. Бірақ мен бұл салыстыруды уақыт өте келе ғана қаламаймын.

SELECT * FROM dbo.TestBox
where TargetDate = dateadd(day,5, getdate()) 

Бұл жұмыс істемейді, неге неліктен дәл уақытын қарастыру керек екенін білмеймін.

Алдын-ала рақмет,

2

6 жауаптар

Сен жасай аласың:

SELECT * FROM dbo.TestBox
where CONVERT(VARCHAR(8),TargetDate,112) = CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112)

Немесе егер сізде TargetDate индексі бар болса:

SELECT * FROM dbo.TestBox
where TargetDate >= CONVERT(VARCHAR(8),dateadd(day,5, getdate()),112) 
AND TargetDate < CONVERT(VARCHAR(8),dateadd(day,6, getdate()),112) 
2
қосылды

Егер сіз 2008+ нұсқасын пайдалансаңыз, екеуін де күні ретінде шығара аласыз:

where convert(date, targetdate) = convert(date, dateadd(day, 5, getdate()))

Егер сіз 2005 не бұрын пайдалансаңыз, мына нәрсені жасаңыз:

where convert(varchar, targetdate, 101) = convert(varchar, dateadd(day, 5, getdate()), 101)
2
қосылды
Сондықтан, DatTime.DateTime ретінде сақталған DATETIME сақталатын аргументін және SQL-дегі сәйкес параметрді datetime деп қою керек болса, онда бұл түрлендіру қажет пе?
қосылды автор MacGyver, көзі

Тырысу:

select * 
from dbo.TestBox 
where datediff(dd, getdate(), TargetDate) = 5

Үлгі коды:

declare @targetDate as DateTime
set @targetDate = '2011-11-2'
select datediff(dd, getdate(), @targetDate)

Шығару:

5

1
қосылды
Неге төмендету?
қосылды автор RedFilter, көзі
Пішім (part, start, end) болып табылады, сондықтан GETDATE() - TargetDate ...
қосылды автор sll, көзі

DATEDIFF to the rescue!

DECLARE @monday DATETIME;
DECLARE @fridayAM DATETIME;
DECLARE @fridayPM DATETIME;
SET @monday = '2011-10-23 10:50:00';
SET @fridayAM = '2011-10-28 08:00:00';
SET @fridayPM = '2011-10-28 17:30:00';
SELECT DATEDIFF(DAY, @monday, @fridayAm) AS AmDiff, 
       DATEDIFF(DAY, @monday, @fridayPm) AS PmDiff

AmDiff және PmDiff екеуі де 5 болады.

1
қосылды

Мәселе әр түрлі уақыт форматтарына байланысты болуы мүмкін.

This link has all the date formatting options in sql http://databases.aspfaq.com/database/what-are-the-valid-styles-for-converting-datetime-to-string.html

Мынадай нәрсені көріңіз:

SELECT * FROM dbo.TestBox where CONVERT(CHAR(8), TargetDate , 1)= dateadd(day,5, (CHAR(8), getdate(), 1))  

Бұл бірдей пішіммен салыстырылатын екі күнді де түрлендіреді және уақыт бөлігін жоғалтады

GETDATE() функциясын пайдаланудың орнына CURRENT_TIMESTAMP қолдануға болады

0
қосылды

Келесі сұрау қажет нәрсені жасайды.

SELECT * FROM dbo.TestBox 
WHERE TargetDate 
        BETWEEN DATEADD(DAY, 5, DATEADD(MILLISECOND, 1, DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)))
        AND DATEADD(DAY, 5, DATEADD(MILLISECOND, -2, DATEADD(DAY, datediff(day, 0, GETDATE()) + 1, 0))) -- between the start and end of the date in 5 days
0
қосылды
Мен осы жауапты төмен дауыспен қабылдадым, неге бұл туралы түсініктеме беру пайдалы болар еді.
қосылды автор Ant Swift, көзі