>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 여러 손님의 숙박에 대한 일일 날짜 범위를 생성하는 방법은 무엇입니까?

SQL Server에서 여러 손님의 숙박에 대한 일일 날짜 범위를 생성하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-10 09:46:40353검색

How to Generate a Daily Date Range for Multiple Guests' Stays in SQL Server?

SQL Server에서 날짜 범위 생성

제목에서 다양한 날짜를 생성한다는 의미가 있지만 주요 문제는 고객이 시설에 머물렀던 날짜별로 여러 행을 생성하는 것입니다. 게스트 이름, 체크인 날짜, 체크아웃 날짜가 주어지면 숙박 날짜별로 행을 출력하는 것이 목표입니다.

다음 쿼리는 이 작업을 효과적으로 해결합니다.

<code class="language-sql">DECLARE @start DATE, @end DATE;
SELECT @start = '20110714', @end = '20110717';

;WITH n AS 
(
  SELECT TOP (DATEDIFF(DAY, @start, @end) + 1) 
    n = ROW_NUMBER() OVER (ORDER BY [object_id])
  FROM sys.all_objects
)
SELECT 'Bob', DATEADD(DAY, n-1, @start)
FROM n;</code>

이 쿼리를 실행하면 다음과 같은 결과가 생성됩니다(제공된 예에 따라).

<code>Bob     2011-07-14
Bob     2011-07-15
Bob     2011-07-16
Bob     2011-07-17</code>

여러 명의 게스트를 수용해야 하는 상황의 경우 쿼리를 보다 포괄적인 형식으로 조정할 수 있습니다.

<code class="language-sql">DECLARE @t TABLE
(
    Member NVARCHAR(32), 
    RegistrationDate DATE, 
    CheckoutDate DATE
);

INSERT @t SELECT N'Bob', '20110714', '20110717'
UNION ALL SELECT N'Sam', '20110712', '20110715'
UNION ALL SELECT N'Jim', '20110716', '20110719';

;WITH [range](d,s) AS 
(
  SELECT DATEDIFF(DAY, MIN(RegistrationDate), MAX(CheckoutDate))+1,
    MIN(RegistrationDate)
    FROM @t 
),
n(d) AS
(
  SELECT DATEADD(DAY, n-1, (SELECT MIN(s) FROM [range]))
  FROM (SELECT ROW_NUMBER() OVER (ORDER BY [object_id])
  FROM sys.all_objects) AS s(n)
  WHERE n <= (SELECT MAX(d) FROM [range])
)
SELECT t.Member, n.d
FROM n CROSS JOIN @t AS t
WHERE n.d BETWEEN t.RegistrationDate AND t.CheckoutDate;</code>

이 조정된 쿼리는 여러 손님에 대한 데이터를 포함하는 다음 결과를 생성합니다.

<code>Member    d
--------  ----------
Bob       2011-07-14
Bob       2011-07-15
Bob       2011-07-16
Bob       2011-07-17
Sam       2011-07-12
Sam       2011-07-13
Sam       2011-07-14
Sam       2011-07-15
Jim       2011-07-16
Jim       2011-07-17
Jim       2011-07-18
Jim       2011-07-19</code>

위 내용은 SQL Server에서 여러 손님의 숙박에 대한 일일 날짜 범위를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.