У меня есть строка '2009-06-24 09: 52: 43.000', которую мне нужно вставить в столбец DateTime таблицы.
Но меня не волнует время, просто хочу вставить его как 2009-06-24 00: 00: 00.000
Как я могу сделать это в T-SQL?
У меня есть строка '2009-06-24 09: 52: 43.000', которую мне нужно вставить в столбец DateTime таблицы.
Но меня не волнует время, просто хочу вставить его как 2009-06-24 00: 00: 00.000
Как я могу сделать это в T-SQL?
Для 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)
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
SELECT CAST(CONVERT(VARCHAR,GETDATE(),102) AS DATETIME)
SELECT CAST(CONVERT(VARCHAR(10),'2009-06-24 09:52:43.000',102) AS DATETIME)
LEFT( @StrDate, 10)
и CONVERT
для вашего значения datetime. Готово.
Если ваша строка ввода может быть любым допустимым форматом даты и времени, вам сначала нужно использовать CONVERT(datetime, @StrDate)
. После этого вы идете с тем, что только что сказал Bing, чтобы удалить временную часть.
Усовершенствование неподдерживаемой версии:
Я не уверен, что это может повлиять на производительность. getdate()
- это временная метка ввода в моем запросе.
select cast(cast(getdate() as DATE) as DATETIME)
отбросить его до даты, а затем вы можете использовать CONVERT, чтобы получить только дату.
INSERT MyTable(Column1)
SELECT CONVERT(CHAR(8), CAST('2009-06-24 09:52:43.000' AS DATETIME), 112)
Вероятно, это более чистый и более портативный способ сделать это, но моя летняя идиома:
insert into tbl (date_column)
select convert(varchar, convert (datetime, '2009-06-24 09:52:43.000'), 101)
Если вы всегда будете иметь дату в том же формате, то есть yyyy-MM-DD, вы можете захватить первые 10 символов, если значение и вставить то, что является эквивалентом 00: 00: 00.0000 для этой даты.
select left('2009-12-32 4:32:00',10)
Это очень эффективный способ сделать это, поскольку он не требует преобразования типов данных, ОДНАКО, он требует, чтобы дата всегда была отформатирована с четырехзначным годом и двумя цифрами день и месяц.
Разнообразные хаки:
convert
, чтобы преобразовать ваше время в строку, используя только часть датыsubstring
, чтобы отрубить конец.floor
Я обнаружил, что кастинг как дата, а затем - время, чтобы быть очень эффективным и интуитивно понятным.
SELECT CAST(CAST(GETDATE() as date) as datetime)
Разделите время и произведите его до даты:
select cast(left(yourstring, 10) as datetime)