DT_DBTIMESTAMP2, имеющий только 3 цифры

У меня есть (DT_DBTIMESTAMP2,7)GETDATE() в столбце преобразования производных столбцов SSIS и столбца таблицы с datetime2 (7). Несмотря на то, что я установил 7-значную шкалу секунд в обоих, кажется, что это всего лишь 3-значная шкала. Например, я ожидал, что '2018-05-02 16:45: 15.6192346', но получается '2018-05-02 16:45: 15.6190000 '.

Причина, по которой мне нужны миллисекунды, я хотел бы отсортировать последнюю запись от любых дубликатов, используя временную метку. Я понял, что только трехзначной второй шкалы для этого недостаточно.

Есть ли какие-либо обязательные настройки в пакете SSIS, за исключением преобразования производных столбцов и столбцов таблицы? Любые советы будут оценены.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 298
2

Ответы 2

GETDATE() возвращает datetime, вместо него следует использовать SYSDATETIME(). См. документация.

редактировать

Как отметил Ларну, вы, вероятно, используете выражение SSIS GETDATE, а не выражение SQL GETDATE, как я предполагал. Но суть более или менее та же. GETDATE возвращает DT_DBTIMESTAMP, где «Дробные секунды имеют максимальный масштаб из 3 цифр». (Источник).

Я думаю, что OP использует выражение SSIS GETDATE(), а не выражение SQL Server GETDATE(). (DT_DBTIMESTAMP2,7)GETDATE() не может быть допустимым синтаксисом SQL Server.

Larnu 02.05.2018 10:03

@Larnu, Хороший момент, я не знал, что существует выражение SSIS с таким же названием. Отредактировано.

HoneyBadger 02.05.2018 10:10

Хотя это почти то же самое, что сказал HoneyBadger, я немного расширяюсь, поскольку OP не использует выражение GETDATE() в SQL Server. Значение 2018-05-02 16:45:15.619 никогда не может быть возвращено GETDATE() (Transact-SQL), поскольку оно имеет точность только до 1/300 секунды (таким образом, последняя цифра может быть только каждые 0,3 и 7 (технически 0, 333333333 ~ и 666666666 ~, поэтому последняя цифра - 7, так как она округлена в большую сторону)).

В SSIS выражение GETDATE() возвращает тип данных DB_TIMESTAMP. Согласно Документация:

A timestamp structure that consists of year, month, day, hour, minute, second, and fractional seconds. The fractional seconds have a maximum scale of 3 digits.

Таким образом, теряются последние 4 символа. К сожалению, я не верю, что в SSIS есть функция, которая возвращает текущую дату и время с требуемой точностью. Таким образом, если вам нужен этот высокий уровень, вам, вероятно, потребуется использовать выражение в SQL Server, которое его поддерживает, например SYSDATETIME(), рекомендованное HoneyBadger.

Ламу и HoneyBadger, большое спасибо за ваш быстрый и добрый ответ. Благодаря вам, наконец, понял, почему он пришел с 3 цифрами. К сожалению, SSIS, похоже, не поддерживает sysdatetime (), поэтому я попробую другие решения для своей цели (и, возможно, вернусь, если я столкнусь с другой проблемой ...). Большое спасибо !

Sachiko 02.05.2018 10:46

@Sachiko, SSIS GETDATE () возвращает DB_DBTIMESTAMP, а не DB_DBTIMESTAMP2, поэтому это только 3 десятичных знака. Если вам нужна более высокая точность, вы можете использовать преобразование сценария, чтобы назначить DateTime.Now столбцу DB_DBTIMESTAMP2.

Dan Guzman 02.05.2018 12:32

Большое спасибо за ваш ценный совет, @Dan :) Я постараюсь добиться большей точности с помощью любых скриптов.

Sachiko 02.05.2018 16:13

Другие вопросы по теме