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

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

Ответы [ 3 ]

32 голосов
/ 23 августа 2011

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

К сожалению, вы не сможете получить какие-либо сведения о дате / времени из столбца ROWVERSION, который у вас уже есть, но если эта информация важна, вам следует добавить столбцы CreatedDate / 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 или равна CreatedDate при инициализации.

14 голосов
/ 23 августа 2011

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

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

9 голосов
/ 04 июля 2012

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

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

и заставить некоторые 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 ()), тогда вы можете используйте эту таблицу как «правитель времени».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...