SQL扩展日期并转换为2017年2月20日星期一的格式或Excel函数
我有一个选择开始和结束日期的SQL。我需要创建输出,以DayName、MonthName dd、yyyy的格式显示该范围内的所有日期,这是大写的扭曲 我一直在寻找,但我发现的所有答案,我相信都过于繁琐 或者。。。 Excel中是否有一种方法可以将格式转换为大写格式? 一旦我将日期字段格式化为DayName、MonthName dd、yyyy,它就不允许我执行=上限函数。不过,我更喜欢使用SQL来完成这一切SQL扩展日期并转换为2017年2月20日星期一的格式或Excel函数,sql,excel,date,casting,Sql,Excel,Date,Casting,我有一个选择开始和结束日期的SQL。我需要创建输出,以DayName、MonthName dd、yyyy的格式显示该范围内的所有日期,这是大写的扭曲 我一直在寻找,但我发现的所有答案,我相信都过于繁琐 或者。。。 Excel中是否有一种方法可以将格式转换为大写格式? 一旦我将日期字段格式化为DayName、MonthName dd、yyyy,它就不允许我执行=上限函数。不过,我更喜欢使用SQL来完成这一切 提前谢谢 我相信我能按照你的要求来做这件事 DECLARE @MinDate DATE =
提前谢谢 我相信我能按照你的要求来做这件事
DECLARE @MinDate DATE = '20120101',
@MaxDate DATE = '20140101';
with cte (testDate)
as(
SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1)
Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b
)
select
UPPER(CAST(DATENAME(dw, testDate)as varchar(10)) + ', ' +
CAST(DATENAME(MM, testDate) as varchar(10))
+ ' ' + CAST(DAY(testDate) as varchar(2))
+ ', ' + CAST(YEAR(testDate) as varchar(4))) as test
FROM cte
编辑:
对于vknowles
这是在cte中不使用交叉连接而获得相同结果的另一种方法
DECLARE @MinDate DATE = '20120101',
@MaxDate DATE = '20140101';
WITH cte (testDate) AS
(
SELECT CAST(@MinDate as DATETIME) as testDate
UNION ALL
SELECT testDate + 1
FROM cte
WHERE testDate + 1 <= @MaxDate
)
select
UPPER(CAST(DATENAME(dw, testDate)as varchar(10)) + ', ' +
CAST(DATENAME(MM, testDate) as varchar(10))
+ ' ' + CAST(DAY(testDate) as varchar(2))
+ ', ' + CAST(YEAR(testDate) as varchar(4))) as test
FROM cte
OPTION (MAXRECURSION 0)
我认为Excel中没有办法将格式化的日期大写,但您可以使用公式将日期转换为文本值,然后将其大写,如in=UPPERTEXTNOW,dddd,mmmm dd,yyyyy-现在将其替换为包含日期的日期或单元格引用。@jonathan-我想我已经分析过了,并且理解了它的工作原理,但我有一个问题。我不确定我是否应该提出一个新问题,但这里是:我假设所有_对象交叉连接到自身的目的只是为了创建一个较大的行空间,然后使用该行空间创建所需的任意多个日期条目。如果您有一个小的数据库和一个大的日期范围,那么这种交叉连接不会产生足够的行,该怎么办?我意识到这不太可能。我承认我没有考虑过。“我将编辑我的答案,以包含另一种方式。”乔纳森-这是一种聪明的方法。经过一些研究,我发现它至少取决于两个特定于实现的特性:1选择而不从,2递归处理。例如,ORACLE需要FROM子句,并为虚拟目的提供双表。SAS PROC SQL实际上不提供这两种功能,尽管您可以伪造1。但是,这仍然是一个很好的例子。