最近做了一個SQL題目,題意很簡單,請您印出一個系統時間,格式為yyymmdd,當場
傻眼!是說y是不是少了一個!但確切的情況絕對是民國年,如:2014 => 103。
SQL語法使用環境為:SQL Server 2008 R2
由於日期是乎是無法直接轉換成民國年的表示,因此我的作法就只是是土法煉鋼囉!
首先只取年的部分,且轉換成數字格式
接著減去1911並轉換成可變動的字元格式,設定為三個字元長度
2. 取得月日的部分
透過CONVERT函數只取得月日部分,印出格式為mm/dd/yy
並且只取五個字元,因此只取mm/dd,如下:
此處的參數值1表示,印出的格式為mm/dd/yy
接著再將 / 取代掉
最後將這兩行的SQL語法相接在一起 (+),即可獲得yyymmdd的格式資料!
這只是簡單、直覺的方法,也許還有更簡潔且一步到位的方式orz...
傻眼!是說y是不是少了一個!但確切的情況絕對是民國年,如:2014 => 103。
SQL語法使用環境為:SQL Server 2008 R2
由於日期是乎是無法直接轉換成民國年的表示,因此我的作法就只是是土法煉鋼囉!
首先,取得西元年,之後再將轉換並相減(1911)的民國年轉換成字串與月日相接XD
1. 轉換成民國年
CAST(DATEPART(YEAR,GETDATE()) AS NUMERIC(4))
首先只取年的部分,且轉換成數字格式
CAST((CAST(DATEPART(YEAR,GETDATE()) AS NUMERIC(4))-1911) AS VARCHAR(3))
接著減去1911並轉換成可變動的字元格式,設定為三個字元長度
2. 取得月日的部分
透過CONVERT函數只取得月日部分,印出格式為mm/dd/yy
並且只取五個字元,因此只取mm/dd,如下:
CONVERT(CHAR(5), GETDATE(), 1)
此處的參數值1表示,印出的格式為mm/dd/yy
接著再將 / 取代掉
SELECT REPLACE(CONVERT(CHAR(5), GETDATE(), 1),'/','')
最後將這兩行的SQL語法相接在一起 (+),即可獲得yyymmdd的格式資料!
這只是簡單、直覺的方法,也許還有更簡潔且一步到位的方式orz...
CAST(DATEPART(YEAR,GETDATE()) AS NUMERIC(4)
回覆刪除左括弧和右括弧數量根本對不上
感謝告知,已補上
刪除用Format內建函數~
回覆刪除declare @SetDate date = '2023/7/12'
select FORMAT(dateadd(year,-1911,@SetDate), N'yyy/MM/dd') SetDate