iT邦幫忙

0

關於MS-SQL預存程序來做日期轉換

原本資料日期格式都是 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),
現在想說改用預存程式來跑看看這個西元轉民國轉換功能,
但是對預存程序沒有自訂函數孰悉,
有沒有高手能夠指點迷津一下,謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
外獅佬
iT邦大師 1 級 ‧ 2015-01-09 13:36:03

不是年份直接減掉1911就好了嗎??疑惑

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

因為目前只懂自訂函數的寫法
不太清楚預存程式是怎麼跑的
翻了微軟的說明頁還是不太清楚

外獅佬 iT邦大師 1 級 ‧ 2015-01-09 14:00:12 檢舉
<pre class="c" name="code">
CREATE PROCEDURE [spConvertDate] @date date, @outdate date OUTPUT
AS
SELECT @outdate=DATEADD(year,-1911,@date);
RETURN
外獅佬 iT邦大師 1 級 ‧ 2015-01-09 14:04:31 檢舉

呼叫sp的方法

<pre class="c" name="code">
DECLARE @date date, @outdate date;
SET @date=getdate();
EXECUTE spConvertDate @date, @outdate OUTPUT;
SELECT @otedate
外獅佬 iT邦大師 1 級 ‧ 2015-01-09 14:04:52 檢舉

請留意,這裡只能使用date、datetime2或datetimeoffset格式,
不能使用datetime或smalldatetime
因為smalldatetime的最小值為1900/01/01 00:00:00
datetime的最小值則為1753/01/01 00:00:00

2
summertw
iT邦好手 1 級 ‧ 2015-01-09 23:08:59

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())

祝你成功...

0
純真的人
iT邦大師 1 級 ‧ 2023-07-16 10:40:31

利用內建函數格式化民國年

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

https://dbfiddle.uk/JOttRJvl

你的答案~

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

https://dbfiddle.uk/Z6m0Pmlh

尼克 iT邦大師 1 級 ‧ 2023-07-16 14:37:07 檢舉

這是2015問題,你回覆?

尼克故意的~在Google搜尋第一頁的文章~
貼語法分享~免得有人找不到~

尼克 iT邦大師 1 級 ‧ 2023-07-19 08:59:08 檢舉

/images/emoticon/emoticon01.gif

我要發表回答

立即登入回答