Это моя функция FirstDayInQtrВыберите оператор MSSQL
Это SQL-запрос
SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
, который может объяснить это утверждение
Это моя функция FirstDayInQtrВыберите оператор MSSQL
Это SQL-запрос
SELECT @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
, который может объяснить это утверждение
DATEADD()
В функция добавляет или вычитает указанный интервал времени с даты.
Синтаксис: DATEADD (DatePart, номер, дата)
qq = quarter,
yy = Year
в вашем вопросе поле даты является представителем как 0 или -1 в синтаксисе DATEPART, SQL-сервер относится 0, как 1900-01 -01 00: 00: 00,000 и -1, как за 1 день до 0 1899-12-31 00: 00: 00,000
так
select dateadd(qq,466,'1900-01-01 00:00:00.000') is the same as
SELECT DATEADD(qq, DATEDIFF(qq ,0, GETDATE()),0)
OR
SET @InsertDate = GETDATE()
SELECT DATEADD(qq, DATEDIFF(qq ,0, @InsertDate),0)
Теперь 466 выводится секцией функции datediff(qq,0,GETDATE())
. Согласно календарному году, между 1900-01-01 00: 00: 00.000 существует 466 кв.
поэтому в @day
u получит 2016-07-01 00:00:00.000
, если ваше значение @InsertDate
равно 2016-07-05 00:00:00.000
.
Я считаю, что это очистит ваши неопределенности: https://stackoverflow.com/a/3945396/6492765
В принципе, SELECT - это способ T-SQL для установки значения для переменной, магия находящаяся в selectin g из объединений или других понятий выбора непосредственно в переменные. При назначении значение 1 только 1 переменной, она ничем не отличается от SET, который, в вашем случае, будет:
SET @day = DATEADD(qq, DATEDIFF(qq ,0, @InputDate),0)
присваивается первый день текущего квартала переменной @day
Я уверен, что мы все могли это объяснить. Что же такое ваш вопрос? Это дает результат, которого вы не ожидаете? Пробовали ли вы его с некоторыми примерами данных, чтобы узнать, что он делает? –
да, я тестировал его, и он отлично работает. но я не могу понять логику этого утверждения –