Для того, чтобы визуализировать то, что происходит здесь, попробуйте следующее:
DECLARE @x VARCHAR;
SET @x = 'abcdefghijklmnop';
SELECT @x;
Результат:
----------
a
You have silently lost data from your variable, because you didn't bother declaring a length for your VARCHAR
. В вашем случае, я думаю, вы в конечном итоге пытаетесь использовать строку -
где-то, в отличие от строки -6:00
.
Я не уверен, как простой SELECT
дал указанную вами ошибку; Я подозреваю, что вы используете его в каком-то другом контексте, который вы не показывали. Но попробуйте снова, как только ваша переменная будет объявлена правильно.
Теперь я понимаю, почему ваш вопрос был неправильным - вы сказали, что переходите на VARCHAR
, но вы не были. Это не является неожиданным, так как -6:00
недействителен DATETIMEOFFSET
; ожидается, что датируют и времени компонентов, иначе тип данных будет называться OFFSET
. Действительный DATETIMEOFFSET
, согласно the documentation, является:
DECLARE @d DATETIMEOFFSET = '1998-09-20 7:45:50.71345 -05:00';
Так что, возможно у вас есть некоторые значения даты и времени, и вы хотите, чтобы применить смещение, а вы можете использовать SWITCHOFFSET()
для этого. Однако -6:00
недействительное значение; он должен быть в формате [+/-]hh:mm
(обратите внимание на ведущее 0 выше, которое, кажется, отсутствует в ваших данных образца). Так что это было бы справедливо:
DECLARE @datetime DATETIME = GETDATE(), @offset VARCHAR(6) = '-06:00';
SELECT SWITCHOFFSET(@datetime, @offset);
Вам необходимо исправить данные в таблице смещений, и вы должны изменить способ вы используете выход. Лично мне было легче держаться подальше от DATETIMEOFFSET
и SWITCHOFFSET()
, тем более что они не знают DST. Мне повезло с использованием таблицы календаря для смещений, сохранения смещений за считанные минуты и использования DATEADD
для переключения между часовыми поясами. YMMV.
Да, правильно я пропустил. выше усекает мои данные и отображается только «-» – Sks
Выполнено, я забыл, что по умолчанию размер varchar равен 1 – Sks
Спасибо Aaaron за напоминание – Sks