Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-其中+;TVF/SVF、交叉应用、T-SQL_Sql_Sql Server 2008_Tsql_Where Clause_Cross Apply - Fatal编程技术网

SQL Server-其中+;TVF/SVF、交叉应用、T-SQL

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)

我试图创建一个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)  -> 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)