Подтвердить что ты не робот

SQL Server удаляет миллисекунды с даты и времени

select *
from table
where date > '2010-07-20 03:21:52'

который я ожидал бы, чтобы не дать мне никаких результатов... ЗА ИСКЛЮЧЕНИЕМ Я получаю запись с datetime 2010-07-20 03:21:52.577

как я могу заставить запрос игнорировать миллисекунды?

4b9b3361

Ответ 1

Вам просто нужно выяснить миллисекундную часть даты и вычесть ее перед сравнением, например:

select * 
from table 
where DATEADD(ms, -DATEPART(ms, date), date) > '2010-07-20 03:21:52'

Ответ 2

select * from table
     where DATEADD(ms, DATEDIFF(ms, '20000101', date), '20000101') > '2010-07-20 03:21:52'

Вам придется обрезать миллисекунды перед сравнением, которое будет медленным во многих строках

Выполните одно из следующих действий:

  • создал вычисленный столбец с приведенными выше выражениями для сравнения с
  • удалите миллисекунды на вставке/обновлении, чтобы избежать накладных расходов на чтение.
  • Если SQL Server 2008, используйте datetime2(0)

Ответ 3

Try:

SELECT * 
FROM table 
WHERE datetime > 
CONVERT(DATETIME, 
CONVERT(VARCHAR(20), 
CONVERT(DATETIME, '2010-07-20 03:21:52'), 120))

Или, если ваша дата является фактическим значением datetime:

DECLARE @date DATETIME
SET @date = GETDATE()
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(20), @date, 120))

Преобразование в стиль 120 сокращает миллисекунды...

Ответ 4

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

select *
from table
where date >= '2010-07-20 03:21:53'

Ответ 5

Если вы используете SQL Server (начиная с 2008 года), выберите один из следующих вариантов:

  • CONVERT (DATETIME2 (0), YourDateField)
  • LEFT (RTRIM (CONVERT (DATETIMEOFFSET, YourDateField)), 19)
  • CONVERT (DATETIMEOFFSET (0), YourDateField) - с добавлением смещения часового пояса

Ответ 6

Используйте CAST со следующими параметрами:

Дата

select Cast('2017-10-11 14:38:50.440' as date)

Выход: 2017-10-11

Datetime

select Cast('2017-10-11 14:38:50.440' as datetime)

Выход: 2017-10-11 14: 38: 50.440

SmallDatetime

select Cast('2017-10-11 14:38:50.440' as smalldatetime)

Выход: 2017-10-11 14:39:00

DateTimeOffset

select Cast('2017-10-11 14:38:50.440' as datetimeoffset)

Выход: 2017-10-11 14: 38: 50.4400000 +00: 00

Datetime2

select Cast('2017-10-11 14:38:50.440' as datetime2)

Выход: 2017-10-11 14: 38: 50.4400000

Ответ 7

Там более одного способа сделать это:

select 1 where datediff(second, '2010-07-20 03:21:52', '2010-07-20 03:21:52.577') >= 0

или

select *
from table
where datediff(second, '2010-07-20 03:21:52', date) >= 0 

один вызов функции меньше, но вы должны остерегаться переполнения максимального числа, если даты слишком далеки друг от друга.

Ответ 8

Пожалуйста, попробуйте

select substring('12:20:19.8470000',1,(CHARINDEX('.','12:20:19.8470000',1)-1))


(No column name)
12:20:19

Ответ 9

Используйте тип данных "Smalldatetime"

select convert(smalldatetime, getdate())

принесет

2015-01-08 15:27:00

Ответ 10

Еще один способ, которым я задал запросы SQL Server, чтобы игнорировать миллисекунды, когда я ищу события с определенной секунды (в параметре в формате "ГГГГ-ММ-ДД ЧЧ: ТТ: СС" ), используя сохраненный процедура:

  WHERE 
  ...[Time_stamp] >= CAST(CONCAT(@YYYYMMDDHHTTSS,'.000') as DateTime) AND 
  ...[Time_stamp] <= CAST(CONCAT(@YYYYMMDDHHTTSS,'.999') as DateTime) 

Вы можете использовать что-то похожее, чтобы игнорировать минуты и секунды.

Ответ 11

Может быть, это поможет.. SELECT [Datetime] = CAST ('20120228' AS smalldatetime)

о/р: 2012-02-28 00:00:00

Ответ 12

SELECT convert (datetime2 (0), getdate())