Кажется, что информация TIMESTAMP
зашифрована каким-то образом, когда данные даты/времени каким-то образом закодированы в двоичном формате. Я просто хочу открыть все строки, которые были изменены сегодня.
Как получить информацию о дате/времени из столбца TIMESTAMP?
Ответ 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()), тогда вы можете используйте эту таблицу как "линейку времени".