繁体   English   中英

SQL Server:使用当前DATENAME作为列名分配动态列名

[英]SQL Server: Assign a dynamic column name using current DATENAME as column name

我正在使用以下查询以M / D / YYYY格式返回当月的所有日期:

SELECT DISTINCT FORMAT(findetail.endtime, 'M/d/yyyy') FROM position
JOIN findetail ON position.position = findetail.position
JOIN product ON position.product = product.product
WHERE MONTH(findetail.endtime) = MONTH(GETDATE())
AND YEAR(findetail.endtime) = YEAR(GETDATE())     
ORDER BY FORMAT(findetail.endtime, 'M/d/yyyy')

这将返回一个列,其中包含当月的每个日期,但未命名该列。

 | (No column name) |
_|__________________|_
 |     2/1/2016     |
 |     2/10/2016    |
 |     2/11/2016    |
 |     2/12/2016    |
 |     2/13/2016    |
 |        ...       |

对于杜松子酒,我想知道是否可以使用当前日期的DATENAME作为查询中的列名,以便对其进行硬编码? 这仅用于OCD,它什么也没做,但是我很好奇。 我正在使用以下查询来获取日期名称:

SELECT DATENAME(MONTH, DATEADD(MONTH, MONTH(GETDATE()), 0) -1)

返回February 从我收集的数据来看,完成此操作的唯一方法是使用动态sql,而我从未使用过它。 任何帮助将不胜感激。 目标是返回:

 |     February     |
_|__________________|_
 |     2/1/2016     |
 |     2/10/2016    |
 |     2/11/2016    |
 |     2/12/2016    |
 |     2/13/2016    |
 |        ...       |

** 更新 **

感谢您指出正确的方向。 这就是我得到的。

查询:

DECLARE @sql NVARCHAR(MAX);
SET @sql = 'DECLARE @DateFrom DATE, @DateTo DATE;
SET @DateFrom = CONVERT(VARCHAR(10),DATEADD(m,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1, 0)), 101); -- FIRST DAY OF PREVIOUS MONTH
SET @DateTo = CONVERT(VARCHAR(10),DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)), 101); -- LAST DAY OF CURRENT MONTH
WITH Dates AS (
    SELECT @DateFrom AS DatesInMonth
    UNION ALL
    SELECT DATEADD(d,1,DatesInMonth) FROM Dates WHERE DatesInMonth < @DateTo
)
SELECT FORMAT(DatesInMonth, ''M/d/yyyy'') AS '+ DATENAME(MONTH, GETDATE()) +' FROM Dates';
EXEC sp_executesql @sql

退货:

 |     February     |
_|__________________|_
 |     2/1/2016     |
 |     2/2/2016     |
 |     2/3/2016     |
 |     2/4/2016     |
 |     2/5/2016     |
 |        ...       |

重做查询以正确排序结果,而不是按第一个字符排序,并使用@ JamieD77的建议删除缩放器功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM