Строка SQL-сервера для датирования преобразования

175
задан Aaron Bertrand 6 August 2018 в 11:57
поделиться

7 ответов

SQL Server (2005, 2000, 7.0) не имеет никого гибким, или даже негибким, способ взять произвольно структурированную дату и время в формате строки и преобразовать его в тип данных datetime.

"произвольно", я имею в виду "форму, которую человек, который записал его, хотя, возможно, не Вы или я или кто-то с другой стороны планеты, будет считать интуитивным и абсолютно очевидным". Откровенно говоря, я не уверен, что существует любой такой алгоритм.

29
ответ дан Philip Kelley 23 November 2019 в 20:25
поделиться

Выполните это через свой процессор запросов. Это форматирует даты и/или времена как так, и один из них должен дать Вам, что Вы ищете. Это привычка быть твердым адаптироваться:

Declare @d datetime
select @d = getdate()

select @d as OriginalDate,
convert(varchar,@d,100) as ConvertedDate,
100 as FormatValue,
'mon dd yyyy hh:miAM (or PM)' as OutputFormat
union all
select @d,convert(varchar,@d,101),101,'mm/dd/yy'
union all
select @d,convert(varchar,@d,102),102,'yy.mm.dd'
union all
select @d,convert(varchar,@d,103),103,'dd/mm/yy'
union all
select @d,convert(varchar,@d,104),104,'dd.mm.yy'
union all
select @d,convert(varchar,@d,105),105,'dd-mm-yy'
union all
select @d,convert(varchar,@d,106),106,'dd mon yy'
union all
select @d,convert(varchar,@d,107),107,'Mon dd, yy'
union all
select @d,convert(varchar,@d,108),108,'hh:mm:ss'
union all
select @d,convert(varchar,@d,109),109,'mon dd yyyy hh:mi:ss:mmmAM (or PM)'
union all
select @d,convert(varchar,@d,110),110,'mm-dd-yy'
union all
select @d,convert(varchar,@d,111),111,'yy/mm/dd'
union all
select @d,convert(varchar,@d,12),12,'yymmdd'
union all
select @d,convert(varchar,@d,112),112,'yyyymmdd'
union all
select @d,convert(varchar,@d,113),113,'dd mon yyyy hh:mm:ss:mmm(24h)'
union all
select @d,convert(varchar,@d,114),114,'hh:mi:ss:mmm(24h)'
union all
select @d,convert(varchar,@d,120),120,'yyyy-mm-dd hh:mi:ss(24h)'
union all
select @d,convert(varchar,@d,121),121,'yyyy-mm-dd hh:mi:ss.mmm(24h)'
union all
select @d,convert(varchar,@d,126),126,'yyyy-mm-dd Thh:mm:ss:mmm(no spaces)'
47
ответ дан Tim 23 November 2019 в 20:25
поделиться

Для этой проблемы лучшее решение, которое я использую, состоит в том, чтобы иметь функцию CLR в SQL-сервере 2005, который использует один из DateTime. Синтаксический анализ или ParseExact функционируют для возврата значения DateTime с указанным форматом.

11
ответ дан Ovidiu Pacurar 23 November 2019 в 20:25
поделиться

Этот страница имеет некоторые ссылки для всех указанных преобразований даты и времени, доступных функции ПРЕОБРАЗОВАНИЯ. Если Ваши значения не попадают в один из приемлемых шаблонов, то я думаю, что лучшая вещь состоит в том, чтобы пойти путем ParseExact.

3
ответ дан tvanfosson 23 November 2019 в 20:25
поделиться

Если Вы хотите, чтобы SQL Server попытался понять его, просто используйте БРОСОК БРОСКА ('безотносительно' даты и времени AS) Однако, который является плохой идеей в целом. Существуют проблемы с международными датами, которые подошли бы. Таким образом, поскольку Вы нашли, для предотвращения тех проблем, Вы хотите использовать стандартный формат ODBC даты. Это - формат номер 120, 20, формат в течение всего двух лет цифры. Я не думаю, что SQL Server имеет встроенную функцию, которая позволяет Вам предоставлять пользователю, данному формат. Вы можете записать свое собственное и могли бы даже найти то, если Вы ищете онлайн.

0
ответ дан Will Rickards 23 November 2019 в 20:25
поделиться

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

В SQL Server 2012 и лучше можно использовать эту функцию:

SELECT DATEFROMPARTS(2013, 8, 19);

Вот то, как я закончил тем, что извлек части даты для помещения в эту функцию:

select
DATEFROMPARTS(right(cms.projectedInstallDate,4),left(cms.ProjectedInstallDate,2),right( left(cms.ProjectedInstallDate,5),2)) as 'dateFromParts'
from MyTable
1
ответ дан 23 November 2019 в 20:25
поделиться
dateadd(day,0,'10/15/2008 10:06:32 PM')
-2
ответ дан 23 November 2019 в 20:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: