Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 10825|Ответ: 0

[Источник] Практическое SQL-утверждение: оценка даты

[Скопировать ссылку]
Опубликовано 26.11.2014 15:53:01 | | |

ОБЪЯВИТЕ @dt свидание
SET @dt=GETDATE()

DECLARE @number int
НАБОР @number=3

--1. Укажите дату первого или последнего дня года
--А. Первый день года
ВЫБРАТЬ Co nVERT(char(5),@dt,120)+ '1-1'

--Б. Последний день года
SELECT Co nVERT(char(5),@dt,120)+ '12-31'


--2. Первый или последний день квартала, в котором находится указанная дата
--А. Первый день квартала
ВЫБЕРИТЕ Co nVERT(datetime,
Co nVERT(char(8),
DATEADD (Месяц,
DATEPART(Квартал,@dt)*3-Мес nth(@dt)-2,
@dt),
120)+ '1 ')

--B. Последний день квартала (решение по делу)
ВЫБЕРИТЕ Co nVERT(datetime,
Co nVERT(char(8),
DATEADD (Месяц,
DATEPART(Квартал,@dt)*3-Мес nth(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) в(1,4)
ЗАТЕМ «31» «ИНАЧЕ «30» ЗАКАНЧИВАЕТСЯ)

--C. Последний день квартала (алгоритм прямого пуша)
ВЫБЕРИТЕ DATEADD(День,-1,
Co nVERT(char(8),
DATEADD (Месяц,
1+DATEPART(Четверть,@dt)*3-Месяц nth(@dt),
@dt),
120)+ '1 ')


--3. Первый или последний день месяца, в котором находится указанная дата
--А. Первый день месяца
ВЫБЕРИТЕ Co nVERT(datetime,Co nVERT(char(8),@dt,120)+ '1')

--Б. Последний день месяца
ВЫБРАТЬ DATEADD(День,-1,Co nVERT(char(8),DATEADD(Mo nth,1,@dt),120)+ '1')

--C. Последний день месяца (легко использовать неправильный метод)
ВЫБЕРИТЕ DATEADD(Mo nth,1,DATEADD(День,-ДЕНЬ(@dt),@dt))


--4. Любой день недели, в который соответствует указанной дате
ВЫБЕРИТЕ DATEADD(День,@number-DATEPART(Будний день,@dt),@dt)


--5. Любой день недели, в который соответствует указанной дате
--A.  Воскресенье — первый день недели
ВЫБЕРИТЕ DATEADD(День,@number-(DATEPART(Будний день,@dt)+@@DATEFIRST-1)%7,@dt)

--Б.  Понедельник — первый день недели
ВЫБЕРИТЕ DATEADD(День,@number-(DATEPART(Будний день,@dt)+@@DATEFIRST-2)%7-1,@dt)






Предыдущий:Проблема использования индекса при обработке sqlserver типа '%keyword%'
Следующий:ORACLE 11g Новые функции — позволяет DDL-замкам ждать DML-блокировки
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com