iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

研究visual studio+MSSQL各項技術系列 第 28

使用者自訂函數(SQL function)簡單介紹

  • 分享至 

  • xImage
  •  

雖然有很多想寫的題材,但本回因為時間有限,就只能挑幾個主要的功能介紹一下。
自訂函數常常用在一些要修正資料、判斷資料內容進行分類的場合,因此有時候會用到這功能。
這邊也是超簡單介紹一下:

新增函式語法大致如下:
CREATE FUNCTION dbo.函式名稱(輸入值)
AS
BEGIN
宣告
主程式
END
GO

刪除函式語法如下:

IF OBJECT_ID(N'dbo.函式名稱', N'FN') IS NOT NULL
    DROP FUNCTION dbo.函式名稱
GO

這是本回的程式:

USE [school]
GO

IF OBJECT_ID(N'dbo.NumberToChinese', N'FN') IS NOT NULL
    DROP FUNCTION dbo.NumberToChinese
GO

CREATE FUNCTION dbo.NumberToChinese (@input AS NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @result AS NVARCHAR(MAX) = N'';
    DECLARE @chineseNumbers AS NVARCHAR(10) = N'零一二三四五六七八九';
    DECLARE @length AS INT = LEN(@input);
    DECLARE @i AS INT = 1;

    WHILE @i <= @length
    BEGIN
        DECLARE @currentChar AS NVARCHAR(1) = SUBSTRING(@input, @i, 1);
        IF @currentChar BETWEEN '0' AND '9'
        BEGIN
            SET @result += SUBSTRING(@chineseNumbers, CAST(@currentChar AS INT) + 1, 1);
        END
        ELSE
        BEGIN
            SET @result += @currentChar;
        END
        SET @i += 1;
    END

    RETURN @result;
END
GO

新增函式的方式和上篇預存程序很像,USE切換資料表後,執行以上函式,新增成功就能看到以下的函數區塊有新的物件:
https://ithelp.ithome.com.tw/upload/images/20231013/20163340SMf0xqp0ud.png

指令就一行,和上個星期的預存程序很像,但是函數是可以直接select查詢的,比預存程序容易使用。

SELECT dbo.NumberToChinese('12345') as '數字轉中文';

https://ithelp.ithome.com.tw/upload/images/20231013/20163340wLJlvyfAqf.png

程式是可以再請chatGPT再複雜一點但就只是文章篇幅比較多,看來只要一個例子就足夠了。能拿來產生程式碼協助說明,chatGPT真的好用


上一篇
MSSQL 預存程序(stored Procedure) - 新增、修改預存程序、預存程序傳入參數
下一篇
SQL Server agent簡易教學
系列文
研究visual studio+MSSQL各項技術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言