在 SQL Select 中作为列返回的日期
Dates returned as columns in SQL Select
我的用户将提交 FromDate
和 ToDate
。我想要发生的是 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
我的用户将提交 FromDate
和 ToDate
。我想要发生的是 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