Сокращение в SQL Server

У меня есть таблица, в которой более 90 миллионов строк, в ней есть данные за более чем 3 года. Я хочу сохранить все записи, добавленные в понедельник (или в любой конкретный день недели), и удалить оставшиеся записи для данных, добавленных годом ранее.

Кто-нибудь может мне с этим помочь?

Трудность, с которой я сталкиваюсь, заключается в том, чтобы разобраться с данными, которые были добавлены в понедельник (или в любой конкретный день недели).


person Swethu    schedule 09.10.2018    source источник
comment
Используйте 1_. Кроме того, вы уверены, что хотите удалить старые данные? Будет ли что-то плохое в том, чтобы заархивировать его где-нибудь, и они будут запрашивать его с помощью DATEPART, если вы хотите видеть только записи за понедельник?   -  person Tim Biegeleisen    schedule 09.10.2018
comment
пожалуйста, сделайте резервную копию перед запуском вашего запроса   -  person Gonzalo.-    schedule 09.10.2018
comment
Спасибо всем :) Данные @TimBiegeleisen заархивированы, нужна текущая таблица для хранения записей только за понедельник   -  person Swethu    schedule 09.10.2018


Ответы (2)


Вы можете использовать дату

DATEPART(dw, '2007-04-21 ') = 2 //  day of the week.

DATENAME(weekday, '2007-04-21 ') = 'Monday'

Дополнительную информацию можно найти по адресу https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017

person Naruto    schedule 09.10.2018
comment
Совет: ( @@DateFirst + DatePart( weekday, SampleDate ) - 1 ) % 7 + 1 всегда будет возвращать целое число от 1 до 7, где 1 соответствует воскресенью, независимо от настройки DateFirst или Language. - person HABO; 09.10.2018

Как сказал Тим, вы можете попробовать

datepart(weekday, your_date) = 2

чтобы проверить, является ли дата понедельником (обратите внимание, что 1 — это воскресенье). Или даже вы можете попробовать

datename(weekday, your_date) = 'Monday'

установить явное название дня недели

person Ivien    schedule 09.10.2018
comment
Мне нравится предложение DATENAME гораздо меньше, чем DATEPART, потому что первое может вернуть что-то другое, чем Monday, если язык сервера не английский. - person Tim Biegeleisen; 09.10.2018