Как конвертировать дату и время только (со временем, установленным на 00: 00: 00.000)

У меня есть строка '2009-06-24 09: 52: 43.000', которую мне нужно вставить в столбец DateTime таблицы.

Но меня не волнует время, просто хочу вставить его как 2009-06-24 00: 00: 00.000

Как я могу сделать это в T-SQL?

Ответ 1

Для SQL Server 2005 и ниже:

CONVERT(varchar(8), @ParamDate, 112)    -- Supported way

CAST(FLOOR(CAST(@ParamDate AS float)) AS DATETIME)   -- Unsupported way

Для SQL Server 2008 и выше:

CAST(@ParamDate AS DATE)

Ответ 2

declare @originalDate datetime
select @originalDate = '2009-06-24 09:52:43.000'

declare @withoutTime datetime
select @withoutTime = dateadd(d, datediff(d, 0, @originalDate), 0)

select @withoutTime

Ответ 3

SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)

Ответ 4

Джеймс прав. Если вы начинаете с строки, и формат всегда будет тем, что вы говорите, тогда вы держите его простым и эффективным. Используйте LEFT( @StrDate, 10) и CONVERT для вашего значения datetime. Готово.

Если ваша строка ввода может быть любым допустимым форматом даты и времени, вам сначала нужно использовать CONVERT(datetime, @StrDate). После этого вы идете с тем, что только что сказал Bing, чтобы удалить временную часть.

Ответ 5

Усовершенствование неподдерживаемой версии: Я не уверен, что это может повлиять на производительность. getdate() - это временная метка ввода в моем запросе.

select cast(cast(getdate() as DATE) as DATETIME)

Ответ 6

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

INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)

Ответ 7

Вероятно, это более чистый и более портативный способ сделать это, но моя летняя идиома:

insert into tbl (date_column)
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101)

Ответ 8

Если вы всегда будете иметь дату в том же формате, то есть yyyy-MM-DD, вы можете захватить первые 10 символов, если значение и вставить то, что является эквивалентом 00: 00: 00.0000 для этой даты.

select left('2009-12-32 4:32:00',10)

Это очень эффективный способ сделать это, поскольку он не требует преобразования типов данных, ОДНАКО, он требует, чтобы дата всегда была отформатирована с четырехзначным годом и двумя цифрами день и месяц.

Ответ 9

Разнообразные хаки:

  • Преобразуйте строку в дату и время, а затем снова с помощью необязательного параметра "style" в convert, чтобы преобразовать ваше время в строку, используя только часть даты
  • используйте substring, чтобы отрубить конец.
  • вокруг даты и времени с помощью floor

Ответ 10

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

 SELECT CAST(CAST(GETDATE() as date) as datetime)

Ответ 11

Разделите время и произведите его до даты:

select cast(left(yourstring, 10) as datetime)