Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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中每周五的默认日期值?_Sql_Sql Server - Fatal编程技术网

SQL Server中每周五的默认日期值?

SQL Server中每周五的默认日期值?,sql,sql-server,Sql,Sql Server,在SQL Server 2008中,我希望设置默认的日期值为每周五,以便在插入新记录时显示在列中 ALTER TABLE myTable ADD CONSTRAINT_NAME DEFAULT GETDATE() FOR myColumn 每周五最好的展示方式是什么 我希望默认值基于当前日期,然后知道下一个可用日期是2013年7月5日 我有以下资料: dateadd(d, -((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getd

在SQL Server 2008中,我希望设置默认的日期值为每周五,以便在插入新记录时显示在列中

ALTER TABLE myTable ADD CONSTRAINT_NAME DEFAULT GETDATE() FOR myColumn
每周五最好的展示方式是什么


我希望默认值基于当前日期,然后知道下一个可用日期是2013年7月5日

我有以下资料:

dateadd(d, -((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())

但是,当通过今天的日期时,它给了我:2013-06-28,实际上是上周五!,这应该是即将到来的星期五

如果您当前的查询在上周五显示,最简单的方法就是在其中添加7:

select dateadd(d, 7-((datepart(weekday, getdate()) + 1 + @@DATEFIRST) % 7), getdate())
------------------^
获取当前星期的最后一个日期星期天,然后从中减去3得到星期五

如果您需要不同的日期,请替换当前的时间戳

编辑: 我考虑了一下,如果上面的星期五(本周星期六)给出的前一个日期不起作用,您可以很容易地使用一个参考日期集,如下所示:

DATEADD(DAY,7 + DATEDIFF(day,'20100109',@checkDateTime)/7*7,'20100108') as FridayRefDate
同样的事情,但没有硬编码的星期五/星期六:

DATEADD(DAY,7 + DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,@checkDateTime),5),@checkDateTime)/7*7,DATEADD(wk, DATEDIFF(wk,0,@checkDateTime), 4))
因此,20100109年是星期五

SET @checkDateTime = '2012-01-14 3:34:00.000'
SELECT DATEADD(DAY,7 + DATEDIFF(day,'20100109',@checkDateTime)/7*7,'20100108') as FridayRefDate
它返回2012/1/20


但是对于SET@checkDateTime='2012-01-13 3:34:00.000',它返回2012/1/13

选择CONVERTDATE,DATEPARTdw时为CASE,GETDATE-6只需将7添加到公式中即可

SELECT DATEADD(dd,CAST(5-GETDATE() AS int)%7,GETDATE()+7)
要验证公式,请执行以下操作:

WITH test AS (
  SELECT GETDATE() AS d UNION ALL
  SELECT DATEADD(dd,1,d)
  FROM test WHERE d < GETDATE() + 30
)
SELECT
 d                                  AS [input],
 DATEADD(dd,CAST(5-d AS int)%7,d+7) AS [output]
FROM test

若要调整公式,请调整5-和+7

,以便希望某列的默认值最接近即将到来的星期五?我希望默认值基于现在的日期,然后知道下一个可用日期是2013年7月5日。谢谢,进行了一些编辑。
WITH test AS (
  SELECT GETDATE() AS d UNION ALL
  SELECT DATEADD(dd,1,d)
  FROM test WHERE d < GETDATE() + 30
)
SELECT
 d                                  AS [input],
 DATEADD(dd,CAST(5-d AS int)%7,d+7) AS [output]
FROM test