Сохранить DateTime в MSSQL 2005 без часов, минут и секунд - PullRequest
3 голосов
/ 27 марта 2009

Я хочу сохранить свои даты в sql2005 как даты (без часовых минут и секунд). Я хочу сделать это, потому что функция между не всегда корректна, если заполнены часы, минуты и секунды.

, но ни datetime, ни smalldatetime не позволяют этого, в 2008 году у вас есть столбец Date, который может это сделать.

Я также нашел этот вопрос, который мне помогает, но мне не нравится приведение к исполнению моих запросов: Как удалить часть времени из значения datetime (SQL Server)?

Ответы [ 8 ]

7 голосов
/ 27 марта 2009

не-литье способ:

SET @d = DATEADD(dd, 0, DATEDIFF(dd, 0, @dt))

Это добавляет количество дней между 0 и вашей датой к 0, в результате чего временной интервал будет равен нулю.

Если это быстрее, чем явный подход CAST, необходимо протестировать. Использование 0 предполагает, что в этом выражении будет выполняться неявное приведение.

1 голос
/ 27 марта 2009

Что вы можете сделать, это убедиться, что сохраняемые даты не имеют минут и секунд, ДО того как вы отправите их в базу данных. Это должно быть довольно просто из кода вашего приложения, если вы создаете дату и время на основе существующей даты и времени, но устанавливаете часы, минуты и секунды на ноль

1 голос
/ 27 марта 2009
SELECT CONVERT (date, GETDATE()) -- Without hours, minutes and seconds.

Для получения более подробной информации, пожалуйста, обратитесь к http://msdn.microsoft.com/en-us/library/ms188383.aspx

0 голосов
/ 11 апреля 2016

пол сегодня дата и время просты, как показано ниже:

select DATEADD(dd, 0, DATEDIFF(dd, 0, getdate()))
0 голосов
/ 12 июля 2012
SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()))
0 голосов
/ 27 марта 2009

МЕЖДУ не будет работать, потому что у даты и времени есть время, отличное от 00: 00: 00.000, поэтому исправьте МЕЖДУ, а не данные.

Это вернет все данные за один день, независимо от времени

DECLARE @FilterDate datetime
SET @FilterDate='3/18/2009'

QUERY
    ...
    WHERE Column1 >= @FilterDate AND Column1 < @FilterDate + 1

Это вернет все данные в диапазоне дат независимо от времени.

DECLARE @StartFilterDate datetime
DECLARE @EndFilterDate datetime
SET @StartFilterDate ='3/18/2009'
SET @EndFilterDate ='3/30/2009'

QUERY
    ...
    WHERE Column1 >= @StartFilterDate AND Column1 < @EndFilterDate + 1
0 голосов
/ 27 марта 2009

Если вы работаете в .NET, вы можете использовать

DateTime.Now.Date

, чтобы дать вам только часть даты от даты и времени.

0 голосов
/ 27 марта 2009

Если ничего не помогает, вы можете сохранить его как целое число секунд от момента времени. Это позволит вам сравнить его с другими датами, хранящимися таким же образом, без приведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...