4

治療日から月の初日までのすべての日付を選択したいだけです。一時テーブルのすべての日付を入力するを使用したい

declare @temp table 
 (
   ddate datetime 
  ) 

私は試してみまし with cte たが、ストアドプロシージャにいる間は避けたいので、whileループを使用したくありません。

たとえば、今日のように11-oct-2012

1-oct-2012したがって、一時テーブルには、から始まる11行が必要です。11-oct-2012

4

4 に答える 4

22

これを試して

DECLARE @startDate DATE=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(GETDATE()) AS VARCHAR)  -- mm/dd/yyyy
DECLARE @endDate DATE=GETDATE() -- mm/dd/yyyy

SELECT [Date] = DATEADD(Day,Number,@startDate) 
FROM  master..spt_values 
WHERE Type='P'
AND DATEADD(day,Number,@startDate) <= @endDate

また

DECLARE @startDate DATETIME=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy
DECLARE @endDate DATETIME= GETDATE() -- mm/dd/yyyy

;WITH Calender AS 
(
    SELECT @startDate AS CalanderDate
    UNION ALL
    SELECT CalanderDate + 1 FROM Calender
    WHERE CalanderDate + 1 <= @endDate
)
SELECT [Date] = CONVERT(VARCHAR(10),CalanderDate,25) 
FROM Calender
OPTION (MAXRECURSION 0)

ここに画像の説明を入力してください

于 2012-10-11T07:08:56.183 に答える
3
declare @temp table (ddate datetime);

insert @temp
select DATEDIFF(d,0,GetDate()-Number)
from master..spt_values
where type='p' and number < DatePart(d,Getdate())
order by 1;
于 2012-10-11T07:56:45.143 に答える
0

current_dateを使用して、生成されたすべてのシリーズの日を日に追加します。シリーズは、月の最初の日からcurrent_dayを0に減算します。たとえば、今日の6月2日、シリーズは(-1、0)になります。

于 2018-06-02T03:15:31.670 に答える
0

次のコードを試してください。

DECLARE @startDate DATETIME=CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy
DECLARE @endDate DATETIME= CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '31/' +  + CAST(YEAR(GETDATE()) AS VARCHAR) -- mm/dd/yyyy

;WITH Calender AS 
(
    SELECT @startDate AS CalanderDate
    UNION ALL
    SELECT CalanderDate + 1 FROM Calender
    WHERE CalanderDate + 1 <= @endDate
)
SELECT [Date] = CONVERT(VARCHAR(10),CalanderDate,25) 
FROM Calender
OPTION (MAXRECURSION 0)
于 2019-10-01T14:57:42.680 に答える