iT邦幫忙

1

請問這段SQL的日期怎麼轉換呢?

sql
  • 分享至 

  • xImage

是這樣的我剛寫好一段SQL
語法大概是這樣

exec sp_executesql N'DECLARE  
                           
                            @StartTime DATE = @startDateString, -- 開始時間
                            @EndTime   DATE = @enddateString -- 結束時間
                 
                            if (object_id(''tempdb.dbo.#MonthTime'') is not null)
							drop table tempdb.dbo.#MonthTime

                            -- 創建臨時表#MonthTime存儲日期
                            CREATE TABLE #MonthTime
                            (
                                 DayTime DATE                                                                     
                            );

                           -- 迴圈獲取日期插入臨時表
                       WHILE @StartTime <= @EndTime
                            BEGIN
                            INSERT INTO #DateTime (DayTime)
                            VALUES (@StartTime);
                            SET @StartTime = DATEADD(DAY, 1, @StartTime);
                        END;
                    SELECT DayTime FROM #DateTime;
',N'@startDateString nvarchar(4000),@enddateString nvarchar(4000)',@startDateString=N'2023-07-01',@enddateString=N'2023-07-31'

結果大概是這樣

https://ithelp.ithome.com.tw/upload/images/20230712/20110132M7MnIGc9Nq.jpg

想請問如果我想改變日期格式
希望結果能變成

7月1日
7月2日
....

請問我該如何調整呢?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
一級屠豬士
iT邦大師 1 級 ‧ 2023-07-13 00:26:06
最佳解答

https://learn.microsoft.com/zh-tw/sql/t-sql/functions/format-transact-sql?view=sql-server-ver16
culture 可以選 zh-tw , culture 接受 .NET Framework 支援的所有文化特性作為引數,不限於 SQL Server 明確支援的語言。

看更多先前的回應...收起先前的回應...

喔~~可以這樣設定

declare @SetDate date = '2023/7/12'
select FORMAT(@SetDate, N'MM月dd日', 'zh-tw') SetDate

https://dbfiddle.uk/XO2WVLJW

tenno081 iT邦研究生 4 級 ‧ 2023-07-13 15:26:12 檢舉

原來還可以這樣寫,我晚點試試看 謝謝

另外語系可以省略~重點格式化字串要有N宣告 (Unicode)

declare @SetDate date = '2023/7/12'
select FORMAT(@SetDate, N'MM月dd日') SetDate

沒有加N~查詢出來的資料會變成 07?12?

tenno081
我在追加一個假設前面為民國年的方式XD..

declare @SetDate date = '2023/7/12'
select FORMAT(dateadd(year,-1911,@SetDate), N'民國yyy年MM月dd日') SetDate

--民國112年07月12日

https://dbfiddle.uk/JOttRJvl

1
純真的人
iT邦大師 1 級 ‧ 2023-07-12 14:35:01

參考~

declare @SetDate date = '2023/7/12'
select replace(right(convert(varchar, @SetDate, 111),5),'/','月') + '日'

所以你的SQL

SELECT replace(right(convert(varchar, DayTime, 111),5),''/'',''月'') + ''日'' DayTime
FROM #DateTime;
',N'@startDateString nvarchar(4000),@enddateString nvarchar(4000)',@startDateString=N'2023-07-01',@enddateString=N'2023-07-31'

tenno081 iT邦研究生 4 級 ‧ 2023-07-12 14:37:10 檢舉

感謝,我後來是用這樣解

  VALUES (CAST(Month(@StartTime) AS NVARCHAR(2)) + ''月''
	+ CAST(Day(@StartTime) AS NVARCHAR(2)) + ''日'','''','''');

tenno081
都可以呀~隨個人喜好寫SQL~

tenno081 iT邦研究生 4 級 ‧ 2023-07-12 14:45:22 檢舉

還是很感謝,我SQL就超爛,如果是C#早早就轉好了= =

我要發表回答

立即登入回答