Вам нужно использовать оператор s
(подстановка), а не просто регулярное выражение. Регулярное выражение позволит вам найти текст; s
позволит вам найти и заменить.
Первая часть - это шаблон, который соответствует вашему желанию, а вторая - строка , которая заменяет все того, что было найдено. Если вам нужно потенциально сопоставить это несколько раз в строке, вы добавляете суффикс g
(глобально).
$line =~ s/,--(\d+)/,+$1/g;
Это находит каждый ,--
, за которым следуют одна или несколько цифр (захваченных паренами в $1
), и заменяет строку ,+$1
, которая интерполирует захваченное число в строку.
Если ,--
не встречается ни в каком другом контексте, кроме этого, вы можете устранить необходимость в захвате числа и просто подставить строку:
$line =~ s/,--/,+/g;
Редактировать: Если строка «найти» всегда только одна цифра, тогда вам не нужно \d+
; \d
сделает, чтобы захватить одну цифру. Для меня привычка предполагать, что, вероятно, будет случай, когда мне нужно будет записать целое число, а не одну цифру.
Снова отредактируйте: уточнив, что регулярное выражение было шагом в правильном направлении, но замена - это способ выполнить операцию «найти и заменить».
Тип данных timestamp Transact-SQL является двоичным типом данных без связанных со временем значений.
Таким образом отвечать на Ваш вопрос: существует ли способ получить значение DateTime из столбца типа метки времени?
Ответ: Нет
Тип данных timestamp в SQL Server 2005 является синонимом rowversion и является просто числом, которое автоматически увеличено с каждым обновлением строки.
Можно бросить его к bigint для наблюдения его значения.
Для получения, что Вы хотите для новых или обновленных строк необходимо propably добавить другой столбец даты и времени (lastupdate) и триггер для обновления того столбца с каждым обновлением.
Для строк, которые были уже вставлены в прошлое, я не думаю, что можно сделать что-то для нахождения точного времени.
Я боюсь, что не возможно преобразовать/бросить МЕТКУ ВРЕМЕНИ в ДАТУ И ВРЕМЯ. У них есть совершенно различное использование и реализации, которые являются несовместимыми.
См. эту ссылку http://www.sqlteam.com/article/timestamps-vs-datetime-data-types
В книгах онлайн также говорится http://msdn.microsoft.com/en-us/library/aa260631.aspx
Тип данных timestamp SQL Server не имеет никакого отношения ко временам или датам. Метки времени SQL Server являются двоичными числами, которые указывают на относительную последовательность, в которой модификации данных произошли в базе данных. Тип данных timestamp был первоначально реализован для поддержки алгоритмов восстановления SQL Server.
Другой ответ Вам вопрос:
Если столбец метки времени является единственным ресурсом для Вас восстановление (никакие резервные копии и т.д.), можно попытаться использовать следующую логику
Метка времени является просто значением счетчика, который увеличен для каждого, вставляют или обновляют операцию, которая выполняется на таблице, которая содержит столбец метки времени.
Если импорт данных, который произошел вчера, был, каждый вставляет нескольких записей, можно видеть последовательность чисел в столбце метки времени как, например:
0x00000000000007D1
0x00000000000007D2
0x00000000000007D3
0x00000000000007D4
0x00000000000007D5
Новая последовательность может быть Вашими добавленными данными (конечно, это не гарантировано), Вы подставляете объединение, которым знанием с другими вещами (как столбец автоприращения при использовании их) для идентификации записей Вы интересуетесь.
Я думаю, что Ваш лучший выбор состоит в том, чтобы восстановить резервное копирование до вставок и сравнить скопированную таблицу с текущей таблицей.
Для идентификации новых строк меткой времени, необходимо отслеживать метки времени, которые были там заранее. В повышении Вы могли:
С незначительным риском ложных положительных сторон, если что-либо еще продолжалось в DB, это получит Вас довольно хорошее различие.
Для более устойчивой проверки Вы могли вычислить MD5 или хеши SHA-1 с Hashbytes на содержании строки, чтобы дать Вам различие с очень низкой вероятностью коллизии (см. эту статью Википедии о нападениях Дня рождения для обсуждения этой проблемы).