2017-02-20 36 views
0

我有一個選擇開始和結束日期的SQL。我需要創建輸出,以DayName,MonthName dd,yyyy格式顯示該範圍的所有日期,這裏是大寫的扭曲...。SQL將日期延長並轉換爲格式2017年2月20日星期一OR Excel函數

我一直在尋找,但我發現的所有答案,我相信是過於繁瑣。

或... 有沒有辦法在Excel中格式化爲大寫格式? 一旦我將日期字段格式化爲DayName,MonthName dd,yyyy,它不允許我執行= UPPER()函數。儘管如此,我寧願用SQL來完成。

在此先感謝。

+0

我不認爲這是Excel中的一個方法,使一個格式化的日期大寫,但你可以用一個公式來把日期轉換爲文本值,然後使它大寫,如'= UPPER( TEXT(NOW(),「dddd,mmmm dd,yyyy」))' - 用包含日期的日期或單元格引用替換「NOW()」。 – vknowles

回答

1

,我相信我能夠做你要求與此

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) 
+0

耶!這樣可行!謝謝喬納森。 :) – shykitten

+0

@jonathan - 我想我解析了這個並理解它是如何工作的,但我有一個問題。我不確定是否應該打開一個新問題,但是這裏是:我假設您將all_objects與其自身的交叉連接僅用於創建一個大行空間,然後您可以使用它創建儘可能多的日期條目。如果你有一個小的數據庫和一個很大的日期範圍,那麼這個交叉連接不會產生足夠的行? (我意識到這是不可能的。) – vknowles

+0

我承認我沒有考慮過。我會編輯我的答案,以包含另一種方式。 – Jonathan

相關問題