|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Уважаемые участники форума, здравствуйте! нужна ваша помощь. Мне необходимо удалять в базе данных записи, которые созданы более, чем три месяца назад (для чистки базы). дата создания пишется в двух форматах. первый формат для чтения записи человеком, как пример - Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375. Пробовал разные варианты, если сравнивать текущую дату через функцию SYSUTCDATETIME , то я не знаю как задать фортат записи Wed Dec 11 13:34:38 MSK 2019 - в формате даты - просто нет обозначения MSK. Если брать второй вариант, то не понятно как задать разницу между текущим временем в unix формате и сравнить с нужным мне условием. Самым простым кажется след. действия это вычислить текущее время в unixtime - это SELECT DATEDIFF_BIG(MILLISECOND,'1970-01-01 00:00:00.000', SYSUTCDATETIME()) Milliseconds; далее отнять от этого три месяца в unix-формате и сравнить с датой создания в unix-формате. Но как эту логику соединить воедино и сделать работающий вариант ума не приложу. дайте пожалуйста, пинок в правильное направление? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 09:54 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1 дата создания пишется в двух форматах. первый формат для чтения записи человеком, как пример - Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375. В двух форматах - это два отдельных поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 09:57 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1, Timestamp - это не то. В месяце разное число дней. Тебе нужен календарь. Ищи, он там должен быть. Даже в mysql можно отнять 3 месяца от даты. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 09:58 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1 дата создания пишется в двух форматах. первый формат для чтения записи человеком, как пример - Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375 Не нужно. Есть встроенный формат даты (который под капотом - timestamp). А юзеру преобразовывай его во что хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 09:59 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Akina Snaut1 дата создания пишется в двух форматах. первый формат для чтения записи человеком, как пример - Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375. В двух форматах - это два отдельных поля? да, два формата - это два отдельных поля, вот пример выборки ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:07 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
crutchmaster Snaut1, Timestamp - это не то. В месяце разное число дней. Тебе нужен календарь. Ищи, он там должен быть. Даже в mysql можно отнять 3 месяца от даты. да мне не принципиально точное количество дней. Можно взять за основу просто - 90 дней и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:08 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1 Но как эту логику соединить воедино и сделать работающий вариант ума не приложу. Вы вычислили "текущее время в unixtime", далее вычисляете "текущее время минус 3 месяца в unixtime", то есть от SYSUTCDATETIME() нужно отнять 3 месяца Удаление делается командой DELETE, условие удаления: "датой создания в unix-формате" < "текущее время минус 3 месяца в unixtime" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:09 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Akina В двух форматах - это два отдельных поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:10 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
alexeyvg Snaut1 Но как эту логику соединить воедино и сделать работающий вариант ума не приложу. Вы вычислили "текущее время в unixtime", далее вычисляете "текущее время минус 3 месяца в unixtime", то есть от SYSUTCDATETIME() нужно отнять 3 месяца Удаление делается командой DELETE, условие удаления: "датой создания в unix-формате" < "текущее время минус 3 месяца в unixtime" Логику я понял, мне бы это как записать, учитывая, что я не спец по MSSQL. Это делается через переменные? DECLARE? Т.е. первая переменная - это текущее время в unix формате, вторая переменная - текущее время минус три месяца? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:16 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1 Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:26 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
Snaut1, Так еще проще. Находишь все таймштампы, которые меньше текущего более чем на 90*24*60*60*1000 мс. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 10:29 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
crutchmaster Snaut1 дата создания пишется в двух форматах. первый формат для чтения записи человеком, как пример - Wed Dec 11 13:34:38 MSK 2019 и второй для систем в unix-формате - пример 1576060478375 Не нужно. Есть встроенный формат даты (который под капотом - timestamp ). А юзеру преобразовывай его во что хочешь. TIMESTAMP - это вообще никакая не дата! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2019, 17:04 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
iap Это серьёзно что ли? И давно так? Обычно дата хранится в как длинное целое со знаком и представляет собой число миллисекунд, относительно 01.01.1970. Ну, в mssql, конечно, может быть всё через жопу, спорить не буду. iap TIMESTAMP - это вообще никакая не дата! Х-спаде, а что тогда это? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 05:42 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
crutchmaster iapTIMESTAMP - это вообще никакая не дата! Х-спаде, а что тогда это?Это целочисленный 8 байтный увеличивающийся счётчик уровня сервера. Правда, сейчас его называют rowversion, тип данных TIMESTAMP устарело, и не рекомендуется к использованию. docstimestamp is the synonym for the rowversion data type and is subject to the behavior of data type synonyms. In DDL statements, use rowversion instead of timestamp wherever possible. The Transact-SQL timestamp data type is different from the timestamp data type defined in the ISO standard. https://docs.microsoft.com/en-us/sql/t-sql/data-types/rowversion-transact-sql ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 09:08 |
|
Удаление записей старше, чем 3 месяца
|
|||
---|---|---|---|
#18+
crutchmaster Обычно дата хранится в как длинное целое со знаком и представляет собой число миллисекунд, относительно 01.01.1970. Тут вообще форум по конкретному продукту, зачем выдавать свои представления о том, как выгодней хранить дату-время, за устройство этого продукта? Он устроен не так. crutchmaster Ну, в mssql, конечно, может быть всё через жопу, спорить не буду. Понятно же, что это не "в mssql", а в Sybase, Микрософт был бы рад сделать нативное хранение, зачем им лишний раз пересчитывать, и вносить путаницу? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2019, 09:12 |
|
|
start [/forum/topic.php?fid=46&fpage=77&tid=1686799]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 323ms |
total: | 454ms |
0 / 0 |