#sql #sql-server-2008
#sql #sql-server-2008
Вопрос:
У меня есть дата и время в файле csv, подобном этому: 20140618123022
и формат столбца таков datetime
, вопрос в том, каков наилучший способ преобразовать эту строку в формат даты и времени ‘2014-06-18 12:30:22’?
Для этого я создам процедуру пула ..
и я думал использовать or RIGHT()
и LEFT()
and concatenation
, это правильный путь?
CONVERT([datetime],(((((((((CONVERT([varchar](4),[data],(0)) '-') substring([data],(5),
(2))) '-') substring([data],(7),(2))) ' ') substring([data],(9),
(2))) ':') substring([data],(11),(2))) ':') substring([data],(13),(2)),(0))
Комментарии:
1. Наилучший способ зависит от базы данных. Какую базу данных вы используете?
2. Вот статья, с которой нужно начать: sqlservercentral.com/articles/T-SQL/88152 Вероятно, ваш лучший выбор — это CLR для достижения вашей цели
Ответ №1:
declare @a varchar(20)
set @a='20140618123022'
select convert(datetime,(left(@a,4) '-' substring(@a,5,2) '-' substring(@a,7,2) ' ' substring(@a,9,2) ':' substring(@a,11,2) ':' right(@a,2)))
ИЛИ это!
select convert(datetime,(left(@a,8) ' ' substring(@a,9,2) ':' substring(@a,11,2) ':' right(@a,2)))
—возвращает
2014-06-18 12:30:22.000
Комментарии:
1. Разделение года, месяца и дня не требуется, ‘20140618 12:30:22’ анализируется правильно
Ответ №2:
Вы можете использовать функцию STUFF, как показано ниже:
DECLARE @D CHAR(14) = '20140619123022'
SELECT STUFF(
STUFF(
STUFF(
STUFF(
STUFF(@D,5,0,'-')
,8,0,'-')
,11,0,' ')
,14,0,':')
,17,0,':')
Вам нужно будет убедиться, что длина вашей строки согласована, т.Е. Это строка длиной 14 символов.
Ссылка на скрипку: http://www.sqlfiddle.com /#!3/d41d8/35769/0