Когда я смотрю на результат, я вижу, что он преобразуется в
2018-01-31 00: 00: 00.000
Я не могу воспроизвести ваш результат. select convert(datetime,'1/1/2018')
не возвращается 31 января. Возвращает 1 января.
Я использую это для извлечения данных на основе конвертированной даты, и это не удается
чтобы получить эту запись 01.01.2008 15:10:43 из-за времени
Поскольку вы конвертируете его в DATETIME
, он получает время 00:00:00
, которое соответствует полуночи. Таким образом, он не может получить что-либо после полуночи, например 15:10
в тот же день. Проще всего сделать так, чтобы ваш оператор <
на следующий день ... , чтобы вам не приходилось учитывать часы, минуты, секунды, миллисекунды ...
where fetch < '20180102'
Обратите внимание, что я не использовал convert
, поскольку SQL Server справится с этим для нас, но не стесняйтесь добавлять его, если он станет более понятным для вас.
where fetch < convert(datetime,'20180102')
Также обратите внимание, что я использовал стандарты ANSI YYYYMMDD
. Другие методы, которые могут вызвать проблемы, когда вы используете DATETIME2
или хотите получить более точное измерение, - это добавить seconds
к вашей дате и использовать <=
.
select dateadd(second,86399,convert(datetime,'20180101'))
Обратите внимание, что это миллисекунды 000
, поэтому это может подкрасться к вам позже, поэтому я предлагаю использовать на следующий день .
За миллисекунды ...
select dateadd(millisecond,86399999,convert(datetime2,'20180101'))