2015-06-09 14 views
0

У меня есть пакет SSIS, который извлекает плоский файл из системы опроса. Одно из полей в плоском файле называется start_date. Он поставляется в формате "04/29/2015 10:09:41 AM PDT"String to DATETIME с TimeZone

Выполнение ...

SELECT Start_Date = CAST(Start_Date AS DATETIME) 

Результаты в ...

Conversion failed when converting date and/or time from character string. 

PDT вызывает проблему поскольку, когда я удаляю его вручную, запрос выполняется нормально. Мой вопрос - это вопрос масштабируемости. Конечно, я могу его жестко скопировать и удалить PDT. Есть ли простой способ удалить это, не будучи конкретным для замены строки или left (x) или жесткого кодирования удаления PDT? Я этого не вижу. Любая помощь приветствуется.

ответ

1

Часовой пояс всегда будет следовать за последним пространством, каким бы оно ни было. Итак, вот общий способ вырезать его. Вы можете настроить поиск часовых поясов, если хотите, в этот момент.

DECLARE @dtstr NVARCHAR(50) = '04/29/2015 10:09:41 AM PDT' 
DECLARE @tzpos INT = CHARINDEX(' ',REVERSE(@dtstr)) --find last space 
DECLARE @dt DATETIME2 = LEFT(@dtstr,LEN(@dtstr)[email protected]) --truncate at last space 

SELECT @dt