Как преобразовать дату и время только в дату (со временем, установленным на 00: 00: 00.000) - PullRequest
11 голосов
/ 25 июня 2009

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

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

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

Ответы [ 11 ]

13 голосов
/ 25 июня 2009

Для 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)
11 голосов
/ 25 июня 2009
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
6 голосов
/ 25 июня 2009
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)

SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)
2 голосов
/ 12 декабря 2014

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

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

2 голосов
/ 25 июня 2009

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

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

1 голос
/ 25 июня 2009

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

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

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

1 голос
/ 25 июня 2009

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

INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)
0 голосов
/ 22 декабря 2017

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

 SELECT CAST(CAST(GETDATE() as date) as datetime)
0 голосов
/ 25 июня 2009

Удалите время и приведите его к дате:

select cast(left(yourstring, 10) as datetime)
0 голосов
/ 25 июня 2009

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

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