首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 判斷逗號分隔字串是否包含指定值的純量函數

     編輯:SQL Server 2005

應用場景

資料表欄位 Parent 存「1,2,3」,需查詢包含「1」的列。

函數定義

CREATE FUNCTION dbo.HasKey
(
    @DataStr VARCHAR(100),
    @Key VARCHAR(8)
)
RETURNS BIT
AS
BEGIN
    DECLARE @Pos INT, @Token VARCHAR(50), @Ok BIT = 0;
    SET @DataStr = @DataStr + ',';  -- 統一結尾

    WHILE LEN(@DataStr) > 0 AND @Ok = 0
    BEGIN
        SET @Pos = CHARINDEX(',', @DataStr);
        SET @Token = REPLACE(SUBSTRING(@DataStr, 1, @Pos), ',', '');
        SET @DataStr = SUBSTRING(@DataStr, @Pos + 1, LEN(@DataStr));
        IF @Token = @Key SET @Ok = 1;
    END
    RETURN @Ok;
END
GO

使用範例

SELECT * FROM dbo.Category
WHERE dbo.HasKey(Parent, '1') = 1;

效能建議

  • 大量資料建議改用 STRING_SPLIT (SQL 2016+) 或 JSON 解析 (SQL 2016+)。
  • 若頻繁查詢,考慮正規化設計:建立關聯表 CategoryParent(CategoryId, ParentId)。
  • 本函數為相容 SQL 2005 的折衷方案,純 T-SQL 迴圈,效能隨字串長度線性增長。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved