Подтвердить что ты не робот

Как получить информацию о дате/времени из столбца TIMESTAMP?

Кажется, что информация TIMESTAMP зашифрована каким-то образом, когда данные даты/времени каким-то образом закодированы в двоичном формате. Я просто хочу открыть все строки, которые были изменены сегодня.

4b9b3361

Ответ 1

TIMESTAMP - это неудачное имя, которое команда SQL Server предоставила для типа данных. Это для concurrency и не имеет ничего общего с датой или временем - они рекомендовали использовать свой псевдоним ROWVERSION, чтобы предотвратить путаницу. Из этой статьи в Интернете в Интернете:" В операциях DDL используйте везде, где это возможно, функцию rowversion.

К сожалению, вы не сможете получить информацию о дате/времени из столбца ROWVERSION, который у вас уже есть, но если эта информация важна, вы должны добавить столбцы CreateDate/ModifiedDate, например:

ALTER TABLE dbo.foo ADD CreatedDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;
ALTER TABLE dbo.foo ADD ModifiedDate DATETIME NULL;

Затем создайте TRIGGER, который запускается на UPDATE, чтобы сохранить значение ModifiedDate текущим. Возможно, вам придется решить, хотите ли вы, чтобы ModifiedDate был NULL или равным CreateDate при инициализации.

Ответ 2

TIMESTAMP - это просто инкрементное значение для каждой строки. Он не содержит фактической информации о дате/времени.

Вам нужен, например, фактический столбец DATETIME с его значением по умолчанию, установленным на GETUTCDATE() или что-то в этом роде.

Ответ 3

В зависимости от сценария использования и требуемой шкалы точности вы можете использовать следующую технику: Поскольку TIMESTAMP - это что-то вроде глобального счетчика, вы можете добавить одну глобальную таблицу с двумя столбцами:

дата и время, временная метка

и сделайте некоторые значения вставки JOB там каждые N минут (в зависимости от требуемой точности). Задание будет вставлять NOW() в столбец datetime и текущее значение TIMESTAMP. Таким образом вы получаете своего рода "линейку времени", и вы всегда можете определить, к каким временным интервалам относится ваш конкретный TIMESTAMP из другой таблицы. Образец: У вас есть временная отметка 0x000121 и найдите временной интервал, когда он был сгенерирован. Таблица имеет значения

20120501 12:00:00   0x000001
20120501 12:15:00   0x000061
20120501 12:30:00   0x000091
20120501 12:45:00   0x000151

Используя запрос выбора, вы сможете определить, что 0x000121 находится между 20120501 12:30:00 и 20120501 12:45:00

Если у вас нет возможности создать такую ​​таблицу/задание, вы можете заглянуть в базу данных и определить другие таблицы с меткой времени, и, возможно, вам повезет, и там найдет столбец datetime (заполненный NOW()), тогда вы можете используйте эту таблицу как "линейку времени".