原本資料日期格式都是 yyyy/mm/dd 例如 2015/1/9
現在要改成 民國的 yyy/mm/dd 例如 104/01/09
原先是用自訂函數來實作這個功能
日期遇上字元不足的就用replicate來轉換
例如 REPLICATE('0',2-LEN(CAST(DATEPART(MM,GETDATE()) AS VARCHAR)
輸入自訂函數的都是日期型態(例如select dbo.名稱(getdate())這樣),
輸出則是固定長度的字元(長度為9),
現在想說改用預存程式來跑看看這個西元轉民國轉換功能,
但是對預存程序沒有自訂函數孰悉,
有沒有高手能夠指點迷津一下,謝謝
不是年份直接減掉1911就好了嗎??
<pre class="c" name="code">
CREATE PROCEDURE [spConvertDate] @date date, @outdate date OUTPUT
AS
SELECT @outdate=DATEADD(year,-1911,@date);
RETURN
呼叫sp的方法
<pre class="c" name="code">
DECLARE @date date, @outdate date;
SET @date=getdate();
EXECUTE spConvertDate @date, @outdate OUTPUT;
SELECT @otedate
請留意,這裡只能使用date、datetime2或datetimeoffset格式,
不能使用datetime或smalldatetime
因為smalldatetime的最小值為1900/01/01 00:00:00
datetime的最小值則為1753/01/01 00:00:00
MS-SQL 有函數功能...
你要輸出的格式是字串格式吧..
以下是建立函數的程式範本..
CREATE FUNCTION RT_DataFormat
(
@xTo_Data AS Date
)
RETURNS VarChar(9)
AS
BEGIN
Declare @YYYY AS int , @mm AS VarChar(2) , @dd AS VarChar(2) , @CYY AS VarChar(3)
Select @YYYY = YEAR(@xTo_Data)
Select @CYY = Right('0' + Convert(VarChar(3),@YYYY - 1911),3)
Select @mm = Right('0' + Convert(VarChar(2),MONTH(@xTo_Data)),2)
Select @dd = Right('0' + Convert(VarChar(2),Day(@xTo_Data)),2)
return @CYY + '/' + @mm + '/' + @dd
END
GO
以下是叫用函數的範本
Select dbo.RT_DataFormat(GETDATE())
祝你成功...
利用內建函數格式化民國年
declare @SetDate date = '2023/7/12'
select FORMAT(dateadd(year,-1911,@SetDate), N'民國yyy年MM月dd日') SetDate
你的答案~
declare @SetDate date = '2023/7/12'
select FORMAT(dateadd(year,-1911,@SetDate), N'yyy/MM/dd') SetDate