Рейтинг:
2
OriginalGriff
Просто: измените свою БД.
Не храните метки времени в виде строк: храните их как значения DATETIME - все остальное просто создает вам проблемы в будущем и тратит впустую пространство.
Хотя можно преобразовать метку времени, для этого требуется много скучного кода:
SELECT CAST(SUBSTRING(TimeStampColumn, 1, 4) + '-' + SUBSTRING(TimeStampColumn, 5, 2) + '-' + SUBSTRING(TimeStampColumn, 7, 2) + ' ' + SUBSTRING(TimeStampColumn, 9, 2) + ':00' AS DATETIME)
И вы должны делать это каждый раз, когда хотите использовать его!
Изменение базы данных: всегда храните значения в наиболее подходящем типе данных. Это сэкономит вам много времени и сил позже.
Kristian_dk
К сожалению, у меня нет доступа к изменению чего-либо в базе данных, так как это старое приложение, по которому я должен делать некоторые отчеты. Но я явно постараюсь изменить хранение дат на datetime на будущее.
Kristian_dk
Я действительно не могу заставить ваш код работать. Создана моя временная метка в формате yyyymmddhh.
ВЫБЕРИТЕ CAST(SUBSTRING (CREATED, 1, 4) + '-' + ПОДСТРОКА (СОЗДАНА, 5, 2) + '-' + ПОДСТРОКА (СОЗДАНА, 7, 2) + '' + ПОДСТРОКА(СОЗДАНА, 9, 2) + ':00' КАК ДАТА И ВРЕМЯ)
,[ИМЯ ПОЛЬЗОВАТЕЛЯ]
,[Этот столбец]
,[СОЗДАН]
,[ИСПОЛЬЗУЕМЫЙ]
,[Пользователю имя_пользователя2]
,[ЭЛЕКТРОННАЯ ПОЧТА]
ОТ [EDW].[Пользователь]
Kristian_dk
Этот код выбрасывает:
Msg 8116, Уровень 16, Состояние 1, Строка 2
Тип данных аргумента int недопустим для аргумента 1 функции подстроки.
OriginalGriff
Проверьте свой дизайн БД: я вообще не уверен, что временная метка-это строка. Сообщение об ошибке подразумевает, что это INT - в этом случае код становится еще более скучным! :смеяться:
Kristian_dk
Конечно, это правда. Только что проверил колонну. Это Интергер.
OriginalGriff
Поэтому дважды проверьте, что именно это за содержимое: целые числа могут быть "тиками"... - или толкование, которое у тебя уже есть. Я бы начал с того, что посмотрел на исходный код устаревшего приложения, которое манипулирует им, и убедился бы, что я понял, что он с ним делает, а не гадал.
Kristian_dk
Наконец-то я нашел решение:
Преобразования(дата, слева(созданные, 8)), как дата создания
Это сделало свое дело..
Спасибо за помощь.. Я никогда не думал об Инте против Строковые коллизии..
OriginalGriff
Пожалуйста!