資料表欄位 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)。