SQL Server-其中+;TVF/SVF、交叉应用、T-SQL
我试图创建一个SQL来根据日期提取数据,现在我可以使用where子句来获取我真正需要的数据 我有下表和TVF:SQL Server-其中+;TVF/SVF、交叉应用、T-SQL,sql,sql-server-2008,tsql,where-clause,cross-apply,Sql,Sql Server 2008,Tsql,Where Clause,Cross Apply,我试图创建一个SQL来根据日期提取数据,现在我可以使用where子句来获取我真正需要的数据 我有下表和TVF: /* dbo.weeks -> column(weeknum), column(date) **date is all Fridays** */ weeknum date 1 2001-09-21 2 2001-09-28 3 2001-10-05 ... .... /* fnBenchMark(@weeknum)
/* dbo.weeks -> column(weeknum), column(date) **date is all Fridays** */
weeknum date
1 2001-09-21
2 2001-09-28
3 2001-10-05
... ....
/* fnBenchMark(@weeknum) -> display benchmark data based on weeknum */
这是我的密码:
SELECT p.weeknum, p.date, q.companyid, q.index
FROM dbo.Weeks AS p
cross apply
dbo.fnBenchmark(p.weeknum) as q
where date = '2001-09-21'
/* Here is what I wish to add to above code but don't know how to do it */
if
date in dbo.Weeks column (date) --if date on where clause is a Friday and it is on dbo.weeks table
then run above code
else
change date to LastFridayDate --if date on where clause is Sat~Thur, then use previous Friday's date
then run above
例如,假设2001-09-21是星期五,如果我在where子句中输入2001-09-24,我希望SQL运行“where date=“2001-09-21”,因为我输入的2001-09-24不是星期五”
也许我应该创建另一个函数(SVF?),根据我输入的参数@date返回上一个星期五的日期?然后使用:
where date = fnFridayCheck(@date I entered)
也许你可以用
datepart(dw,getdate())
而不仅仅是storedprocedure,或者仅仅是一个查询
IF datepart(dw,getdate()) = 6
BEGIN
something if it's a friday (because 6 in dateprart points to firday)
END
ELSE
BEGIN
something else to do
END
也许你可以用
datepart(dw,getdate())
而不仅仅是storedprocedure,或者仅仅是一个查询
IF datepart(dw,getdate()) = 6
BEGIN
something if it's a friday (because 6 in dateprart points to firday)
END
ELSE
BEGIN
something else to do
END
什么是
**date**
???添加类型和/或create table语句可能会有所帮助。如果您编写了一个函数来获取下一个星期五(或上一个-如果您选择星期三,是要最后一个星期五还是下一个星期五?)。因此,您的WHERE
子句类似于WHERE[date]=fnFriday('2001-09-24')
。然后,您必须将其编写为一个函数,该函数接受1个日期输入,并使用dbo.weeks表输出最近的日期,也就是星期五。此外,为什么在某些字段周围使用**?这不像我见过的任何t-SQL。你想用la reddit格式将它们加粗吗?@Tingo我想你是对的,也许我可以创建一个新的FridayCheck SVF,然后使用where date=fFridayCheck(@date I entered)What is**date**
???添加类型和/或create table语句可能会有所帮助。如果你编写了一个函数来获取下一个参数呢(或上一个-如果选择星期三,是最后一个星期五还是下一个星期五?)星期五。因此您的WHERE
子句类似于WHERE[date]=fnFriday('2001-09-24'))
。然后,您必须将其编写为一个函数,该函数接受1个日期输入,并使用dbo.weeks表输出最接近的日期,也就是星期五。另外,为什么在某些字段中使用**?这与我见过的任何t-SQL都不一样。您是否尝试将其加粗为la-reddit格式?@Tingo我想您是对的,也许我可以创建一个新的FridayCheck SVF,然后使用where date=fnFridayCheck(@date I entered)