#sql #sql-server #hardcode
#sql #sql-server #жесткий код
Вопрос:
Я все еще новичок в SQL, поэтому этот вопрос, который я задаю, может быть легким для вас. Итак, я создаю отчет, который за каждую неделю генерирует предыдущие 14 дней (или 2 недели) финансируемых контрактов. Я знаю, что это должно быть жестко запрограммировано для конкретной компании. Идентификатор для этой конкретной компании равен «55», так что может кто-нибудь помочь мне с этой функцией? Мой запрос, который я знаю, еще не завершен, я просто застрял на том, как ввести функцию даты для этого.
Create PROC [dbo].[spAdminFundedDateee]
Begin
SELECT c.program_id, d.dealer_code,b.last_name As DealerName, a.account_no, a.vin,
((e.last_name) ',' (e.first_name)) As Name, a.funded_date, a.cancel_refund_date,
a.purchase_date,a.miles, a.duration,a.sale_price,a.number_of_payments,
a.sales_tax, a.downpayment
from tDealer d
Join tContact b ON d.contact_id = b.contact_id
Join tContract a On d.dealer_id = a.dealer_id
Join tCompany c ON d.company_id= c.company_id
Join tContact E On e.contact_id = a.contact_id
Where c.program_id = 55 And a.funded_date between
End
exec spAdminFundedDateee '05/1/2014','05/30/2014','55'
Комментарии:
1. Прочитайте документацию SQL Server по хранимым процедурам, особенно раздел о передаче параметров. В этом случае вы могли бы передать параметры
@ProgramID
и@FundedDate
и вычислить начальную дату периода из параметра funded date .2. Прежде всего, вам нужно будет указать свои параметры в SP. а затем вы могли бы просто сделать между [@BeginDate] и [@EndDate] .
3. Я собирался это сделать, но мой босс хочет, чтобы это было без параметров. У меня это должно быть жестко запрограммировано. Также это станет подпиской
Ответ №1:
Чтобы проверить, находится ли.funded_date между сегодняшней датой и датой двухнедельной давности, вам понадобится несколько функций sql server. Первый — GetDate() . Это возвращает текущую дату и время в качестве значения datetime.
Теперь вы хотите проверить только параметр даты (не время). Если кто-то запускает вашу хранимую процедуру в 1 час дня, вы не хотите удалять все данные до 1 часа дня 14 дней назад. Вам нужны все данные, независимо от времени, начиная с 14 дней назад. Чтобы решить эту проблему, мы хотим изменить getDate() только на дату. итак, приведите (getDate() в качестве даты). Сегодня это вернет 6-18-14.
Наконец, вы хотите проверить дату двухнедельной давности. dateAdd позволяет добавлять любое количество времени, которое вы указываете, к дате или времени. в этом случае вам нужна информация за 14 дней. это будет выглядеть как dateadd(dd, -14, приведение(getDate() в качестве даты)).
Поскольку значение between включено, все, что вам нужно сделать сейчас, это собрать их вместе!
between dateadd(dd, -14, cast(getDate() as date)) and cast(getDate() as date)
Комментарии:
1. Итак, я попробовал ваш кодек. Я собрал все это вместе, но при выполнении не получаю никакого результата. Что-то не так в моем sp?
2. @user3753188 вы получаете пустую таблицу или сообщение об ошибке? если вы получаете пустую таблицу, вам следует попытаться просмотреть информацию, хранящуюся в ваших таблицах, и найти точки данных, которые этот запрос должен вернуть.
Ответ №2:
если.funded_date является DATETIME, то
a.funded_date between dateadd(day,-14,getdate()) and getdate()
если.funded_date — это ДАТА, то
a.funded_date between cast(dateadd(day,-14,getdate()) as date) and cast(getdate() as date)
Комментарии:
1. Это при условии, что предыдущие 14 дней финансируемых контрактов подразумевают: 14 дней до сегодняшнего дня.
Ответ №3:
Привет, ребята, итак, я обновил свое предложение Where, но когда я запускаю запрос, я получаю заголовок столбца, но с пустой таблицей. Когда я ввел жесткий код дат, это правильно? Я все еще новичок в функции даты, поэтому я знаю, что это должно быть здравым смыслом для большинства из вас, чем для меня. Я предполагаю жестко указать даты, предшествующие 14 дням, и предполагаю получать финансируемые контракты каждый понедельник до 14 дней каждые 2 недели. Это мой первый отчет, поэтому я прошу прощения за то, что задал несколько вопросов, которые, по мнению некоторых из вас, я должен знать. Я все еще учусь.
Alter PROC [dbo].[spAdminFundedDateee]
As
Begin
SELECT c.program_id, d.dealer_code,b.last_name As DealerName, a.account_no,
a.vin, ((e.last_name) ',' (e.first_name)) As Name,
a.funded_date, a.cancel_refund_date, a.purchase_date,a.miles,
a.duration,a.sale_price,a.number_of_payments, a.sales_tax, a.downpayment
from tDealer d
Join tContact b ON d.contact_id = b.contact_id
Join tContract a On d.dealer_id = a.dealer_id
Join tCompany c ON d.company_id= c.company_id
Join tContact E On e.contact_id = a.contact_id
Where c.program_id = 55 And a.funded_date between '05/19/2014' and '06/02/2014'And
a.funded_date between dateadd(dd, -14, cast(getDate() as date)) and cast(getDate()
as date)
END
GO
EXEC spAdminFundedDateee