2016-06-20 1 views
0

У меня есть строка '2016-03-05', которую я хочу преобразовать в datetime.Как преобразовать строку YYYYMM в datetime в sql?

Вот мой код:

Declare @period as nvarchar(10) 
Set @period = '2016-03-05' 
Select Convert(Datetime, @period, 112). 

Запуск, что я получаю ошибку

преобразования не удалось при преобразовании DateTime из строки символов.

+0

Строка '201605' не является полным datetime - типы данных SQL Server не поддерживают ort только год-месяц, всегда есть день. –

+0

** Ваш вопрос непонятен. ** В заголовке вы указываете формат 'YYYYMM', в вопросительном теле вы показываете формат' YYYY-MM-DD'. Какой формат вы имели в виду? Каков ожидаемый результат? – miroxlav

ответ

2

формат преобразования 112 вы использовали предполагает ввод '20160305' (без тире в качестве разделителя компонентов даты).

Так что либо сделать

select convert(Datetime, '20160305', 112) 

или (если вход действительно содержит дефис, то просто удалите их, как:

select convert(Datetime, replace('2016-03-05', '-', ''), 112) 
0
SELECT LEFT(201605,4) + '-' + RIGHT(201605,2) 
{OR} 
SELECT RIGHT(201605,2) + '-' + LEFT(201605,4) 
1

Это потому, что стиль вы передаете функции CONVERT не поддерживает этот формат. Вы можете сделать две вещи ...

1- Бросьте даше s

Declare @period as nvarchar(10) 
Set @period = '20160305' -- I've dropped the dashes here 
Select Convert(Datetime, @period, 112) 

2- Изменить стиль к чему-то, что поддерживает этот формат

Declare @period as nvarchar(10) 
Set @period = '2016-03-05' 
Select Convert(Datetime, @period, 21) -- I've changed the style here 

Для полной справки, читать MSDN documentation

0

Попробуйте это будет работать, я думаю, в соответствии с вашими потребностями

Declare @period as nvarchar(10) 
Set @period = '2016-03-05' 
select CAST(@period as datetime) 
Смежные вопросы