【问题标题】:How to declare dates in SQL multiple value如何在 SQL 多值中声明日期
【发布时间】:2016-09-23 15:43:26
【问题描述】:

我正在尝试创建我的 SQL 语法,以便我们可以有多种输入。我想出了如何在一个设定的日期做到这一点,它奏效了。 我的同步是:

DECLARE @MyDay AS VARCHAR(50);
DECLARE @NextDay AS VARCHAR(50);

SET @MyDay = '8/30/2016';
SET @NextDay = DATEADD(d, 1, @MyDay);

但是,我对如何在多个日期执行此操作感到困惑。理想情况下,我想输入一个日期范围,然后它将扫描记录,即设置 10 月 1 日和 10 月 5 日之间的范围。

我使用的是 SQL Server Management Studio 2008

【问题讨论】:

  • 有点不清楚。您是在寻找一个(用户驱动的)日期范围还是多个范围。还有为什么是 varchar 而不是 date?

标签: sql-server tsql declare


【解决方案1】:

如果您只想要 2016 年 8 月 30 日到 2016 年 9 月 5 日之间的一系列日子和接下来的几天,您可以使用如下派生表方法。

declare @n int;
declare @StartDate datetime, @EndDate datetime;

set @n = 5;
set @StartDate = '20160830';
set @EndDate = dateadd(day, @n, @StartDate);

select cast(dateadd(day, number, @StartDate) as date) as MyDate,
 cast(dateadd(day, number + 1, @StartDate) as date) as MyNextDate
from 
    (select distinct number from master.dbo.spt_values
     where name is null
    ) n
where dateadd(day, number, @StartDate) < @EndDate;

您也可以使用临时表、表变量来存储日期,或者也可以使用 cte。

下面给出一个递归 cte 实现示例。请注意,如果您的日期范围很长,则您需要设置 MAXRECURSION 选项,因为最大递归的默认值为 100。

declare @n int;
declare @StartDate datetime, @EndDate datetime;

set @n = 5;
set @StartDate = '20160830';
set @EndDate = dateadd(day, @n, @StartDate);

 ;with DateSeq as
 (
 select cast(@StartDate as date) as MyDate
 union all
 select dateadd(day , 1, MyDate) AS MyDate
    from DateSeq where dateadd (day, 1, MyDate) < @EndDate
 )
select MyDate, dateadd(day , 1, MyDate) AS NextDate
 from DateSeq;

临时表实现示例如下。

declare @MyDateRange table(MyDate date);

 Insert into @MyDateRange values('8/30/2016')
 Insert into @MyDateRange values('9/1/2016')
 Insert into @MyDateRange values('9/2/2016')
 Insert into @MyDateRange values('9/3/2016')
 Insert into @MyDateRange values('9/4/2016')

select MyDate, dateadd(day, 1, MyDate) as NextDate from @MyDateRange

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多