SQL Server - 西元年轉換成民國年

最近做了一個SQL題目,題意很簡單,請您印出一個系統時間,格式為yyymmdd,當場

傻眼!是說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...

留言

  1. CAST(DATEPART(YEAR,GETDATE()) AS NUMERIC(4)
    左括弧和右括弧數量根本對不上

    回覆刪除
  2. 用Format內建函數~
    declare @SetDate date = '2023/7/12'
    select FORMAT(dateadd(year,-1911,@SetDate), N'yyy/MM/dd') SetDate

    回覆刪除

張貼留言