Основываясь на выборе, я могу вернуть x строк следующим образом:
1 2019-07-23 10:14:04.000
1 2019-07-23 10:14:11.000
2 2019-07-23 10:45:32.000
1 2019-07-23 10:45:33.000
У нас есть все миллисекунды с 0.
Есть ли способ добавить 1 на 1 миллисекунды, так что выбор будет выглядеть так:
1 2019-07-23 10:14:04.001
1 2019-07-23 10:14:11.002
2 2019-07-23 10:45:32.003
1 2019-07-23 10:45:33.004
Я пытаюсь создать курсор или даже обновление безуспешно.
Это запрос для получения желаемых результатов:
select top 10 ModifiedOn
from [SCHEMA].[dbo].[TABLE]
where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Есть 81 тыс. Значений. Поле есть DATETIME
.
sql-server
sql-server-2008
datetime
varchar
Racer SQL
источник
источник
Ответы:
Datetime
не является точным до уровня 1 миллисекунды. То, о чем вы просите, невозможно, если вы не переключитесь на другой тип данных (т.е.datetime2
).Документация
Важная цитата:
источник
DateAdd
Функция то , что вы ищете.Используйте
millisecond
в качестве первого параметра функции, чтобы сообщить ей, что вы добавляете миллисекунды. Затем используйте1
в качестве второго параметра количество миллисекунд для добавления.Вот пример: захват текущего времени в переменную, добавление к нему одной миллисекунды и сохранение результата в качестве второй переменной, а затем печать каждой переменной.
Результаты:
Замечания:
Как указывает Форрест в другом ответе,
datetime
тип данных не гарантирует точность в миллисекундах. Он округляется с шагом .000, .003 или .007 секунд. Если вам нужна точность в миллисекундах, используйтеdatetime2
.источник
@ Дуг-Деден имеет правильную отправную точку, но я просто хотел попытаться ответить на то, что, как я думал, было первоначальным намерением вопроса - как применить его к результирующему набору с увеличением миллисекунд на строку.
В этом случае вы можете использовать ROW_NUMBER и Common Table Expression (отредактировать при необходимости структуру таблицы, включая объединения и т. Д.).
Выберите, чтобы показать значения:
Обновление присоединяется к исходной таблице:
источник
Table1
. Просто сделайUPDATE CTE SET my_date_column =...
Я сделал это с помощью
DATETIME2(3)
.Как вы можете видеть по запросу ниже, это больше
economic
:Различия между
datetime
иdatetime2
хорошо объяснены здесь .Для этого упражнения я создаю временную таблицу для целей тестирования и наполняю ее 999, отличным
random dates
от01-jan-2019
и сегодня (23-july-2019
)а затем по порядку я устанавливаю миллисекунды от 1 до 999
и вот что я получаю: (частичный вид)
источник
Один из других постеров правильный;
DATETIME
(в T-SQL) не с точностью до миллисекунды (с точностью до центсекунды).Для этого уровня точности вы хотите использовать
DATETIME2
.Вот пример преобразования строки
datetime
вdatetime2
, затем добавление 1 миллисекунды и, наконец, обратное преобразование в строку.источник
varchar
без длины .