狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SQL Server中自定義函數:用指定的分隔符號分割字符串

admin
2024年6月6日 10:16 本文熱度 1245

微軟SQL Server數據庫中包含了很多內置的函數,如下圖:

它們用于處理日期、數學、元數據、字符串等。

其中最為常用的就是處理字符串,里面包含了CharIndex()等函數,非常方便使用。

但是對于 特殊字符串的處理,比如:ISBN號 '978-7-5007-7234-7',如果想獲取第三個與第四個分割符號之間的數字,

那么SQL 內置函數無法直接做到。這時就需要自定義函數。下面自定義三個函數,用于處理特殊的字符串。

一、按指定符號分割字符串,返回分割后的元素個數

ALTER FUNCTION [dbo].[Fun_GetStrArrayLength]

(

    @originalStr VARCHAR(1024),    --要分割的字符串

    @split       VARCHAR(10)       --分隔符號

)

RETURNS INT

AS

BEGIN

    DECLARE @location INT;  --定義起始位置

    DECLARE @start INT;     --定義從第幾個開始

    DECLARE @length INT;    --定義變量,用于接收計算元素的個數


    SET @originalStr = LTRIM(RTRIM(@originalStr));    --去除字符串左右兩側的空格


    SET @location = CHARINDEX(@split, @originalStr);  --分割符號在字符串中第一次出現的位置(索引從1開始計數)


    SET @length = 1;


    WHILE @location <> 0

    BEGIN

        SET @start = @location + 1;

        SET @location = CHARINDEX(@split, @originalStr, @start);

        SET @length = @length + 1;

    END

    RETURN @length;

END

調用函數:select dbo.Fun_GetStrArrayLength('978-7-5007-7234-7','-')

結果:5

二、按指定符號分割字符串,返回分割后指定索引的第幾個元素,像數組一樣方便

ALTER FUNCTION [dbo].[Fun_GetStrArrayStrOfIndex]

(

    @originalStr     VARCHAR(1024),  --要分割的字符串

    @split           VARCHAR(10),    --分隔符號

    @index           INT             --取第幾個元素

)

RETURNS VARCHAR(1024)

AS

BEGIN

    DECLARE @location INT; --定義第一次出現分隔符號的位置

    DECLARE @start INT;    --定義開始位置

    DECLARE @next INT;     --定義下一個位置

    DECLARE @seed INT;     --定義分割符號的長度


    SET @originalStr = LTRIM(RTRIM(@originalStr));    --去除字符串左右2側空格

    SET @start = 1;

    SET @next = 1;

    SET @seed = LEN(@split);


    SET @location = CHARINDEX(@split, @originalStr);  --第一次出現分隔符號的位置


    WHILE @location <> 0

          AND @index > @next

    BEGIN

        SET @start = @location + @seed;

        SET @location = CHARINDEX(@split, @originalStr, @start);

        SET @next = @next + 1;

    END


    IF @location = 0

        BEGIN

            SELECT @location = LEN(@originalStr) + 1;

        END


    --存在兩種情況:

    --1、字符串不存在分隔符號。

    --2、字符串中存在分隔符號,跳出while循環后,@location為0,那默認為字符串后邊有一個分隔符號。


    RETURN SUBSTRING(@originalStr, @start, @location -@start);

END

調用函數:select dbo.Fun_GetStrArrayStrOfIndex('978-7-5007-7234-7','-',4)

結果:7234

三、像數組一樣遍歷字符串中的元素

ALTER FUNCTION [dbo].[Fun_SplitStr]

(

    @originalStr      VARCHAR(8000), --要分割的字符串

    @split varchar(100)              --分隔符號

)

RETURNS @temp TABLE(Result VARCHAR(100))

AS

BEGIN

    DECLARE @result AS VARCHAR(100);   --定義變量用于接收單個結果


    SET @originalStr = @originalStr + @split ;


    WHILE (@originalStr <> '')

    BEGIN

        SET @result = LEFT(@originalStr, CHARINDEX(@split, @originalStr, 1) -1) ;


        INSERT @temp VALUES(@result) ;


        --STUFF()函數用于刪除指定長度的字符,并可以在指定的起點處插入另一組字符。

        SET @originalStr = STUFF(@originalStr, 1, CHARINDEX(@split, @originalStr, 1), '');

    END

    RETURN

END

調用示例:select * from dbo.Fun_SplitStr('978-7-5007-7234-7','-')
結果: 978

            7

           5007

           7234

           7


該文章在 2024/6/6 10:16:28 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved