在 SQL Select 中作为列返回的日期

Dates returned as columns in SQL Select

我的用户将提交 FromDateToDate。我想要发生的是 select 这些日期之间的日期,我已经用下面的脚本完成了。日期将是动态的。

DECLARE @fromDateParam DATETIME = '2022-01-24 00:00:00.000'
DECLARE @toDateParam DATETIME = '2022-01-29 00:00:00.000'

;WITH fnDateNow(DayOfDate) AS
(
    SELECT @fromDateParam AS TransactionDate

    UNION ALL

    SELECT DayOfDate + 1 
    FROM fnDateNow 
    WHERE DayOfDate < @toDateParam
) 
SELECT fnDateNow.DayOfDate AS TransactionDate 
FROM fnDateNow

这个 return 日期为行。我正在寻找的是一种将这些日期 return 作为不同脚本的列的方法。

此 table 称为 DailyTransactionHeader,它有一列 [TransactionDate] 和另一列称为 [Amount]

有可能他们不是 DailyTransactionHeader 具有指定日期的我正在寻找 return 0.

所以我试图让数据看起来像这样(我格式化了日期)会有不止一行,但我只是想展示一个我想要完成的例子。

感谢任何帮助,

谢谢

您可以使用动态 sql 来完成。例如:

CREATE PROCEDURE [GET_DATE_TABLE] 
(
    @FROMDATE DATETIME, 
    @TODATE DATETIME
)
AS
DECLARE @PDATE DATETIME 
DECLARE @SQL VARCHAR(MAX) 
DECLARE @SEP VARCHAR(10)

    SET @PDATE = @FROMDATE
    SET @SQL = 'SELECT '
    SET @SEP = ''
    
    WHILE @PDATE < @TODATE
    BEGIN
        SET @SQL = @SQL + @SEP + 'NULL as [' + CONVERT(VARCHAR, CONVERT(DATE, @PDATE)) + ']'
        
        SET @PDATE = @PDATE + 1
        SET @SEP = ', '
    END;

    EXEC(@SQL)

测试示例:

DECLARE @fromDateParam DATETIME = '2022-01-24 00:00:00.000'
DECLARE @toDateParam DATETIME = '2022-01-29 00:00:00.000'
exec dbo.GET_DATE_TABLE @fromDateParam, @toDateParam