Имя: Пароль:
1C
 
Как сократить таблицу РегистрСведений.лВерсииОбъектов через t-sql
0 dmrjan
 
21.10.23
14:10
Пытаюсь сократить таблицу через MSSQL Studio (MSSQL 2019)

USE [base20];
DELETE FROM [base20].[dbo].[_InfoRg11063]
WHERE CONVERT(datetime, [_Fld11068], 102)  < '2022.12.31'

Результат - преобразование типа данных varchar в тип данных datetime привело к значению вне диапазона.

посмотрел поле -
4022-02-10 14:45:04.000
_Fld11068 (datetime, НЕ NULL)
Смущает число 40 вначале, может поэтому не идет преобразование?
1 H A D G E H O G s
 
21.10.23
15:24
Может поэтому.
В sql 1С добавляет к своим датам 2000 лет
2 Гена
 
21.10.23
16:13
(1) Я правильно предполагаю, что сдвиг в 2000 лет из-за разницы минимальных (пустых) дат в 1С и sql?
Если так, то должен быть и обратный сдвиг в минус те же 2000? Значит, если sql по заданной формуле соберёт, например, 1998.10.21 - то после возврата в 1С этой даты, она квакнет мимо разрешённого диапазона?
3 АНДР
 
21.10.23
21:27
(2) это особенность начала летоисчисления даты в ms sql из-за особенностей ек хранения. Значение смещения дат 1с хранит в табличке dateoffset
4 АНДР
 
21.10.23
21:29
(0) литерал даты в ms sql без точек. И учитывай смещение дат
5 dmrjan
 
23.10.23
12:03
Всем спасибо. Вопрос решился. Сделал так:
USE [base20];
DELETE FROM [base20].[dbo].[_InfoRg11063]
WHERE (CONVERT(datetime, [_Fld11068], 102)) < DATEADD(YEAR, 2000, CONVERT(datetime, '2022-12-31', 102))

Проверил в 1с версионирование - регистр сведений сократился.