66 lines
3.4 KiB
Transact-SQL
66 lines
3.4 KiB
Transact-SQL
USE [site_fuchs]
|
|
GO
|
|
/****** Object: UserDefinedFunction [dbo].[ott_jcsv_contains] Script Date: 02.12.2020 21:05:05 ******/
|
|
DROP FUNCTION [dbo].[ott_jcsv_contains]
|
|
GO
|
|
/****** Object: UserDefinedFunction [dbo].[ott_jcsv_contains] Script Date: 02.12.2020 21:05:06 ******/
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
-- =============================================
|
|
-- Author: <Author,,Name>
|
|
-- Create date: <Create Date, ,>
|
|
-- Description: <Description, ,>
|
|
-- =============================================
|
|
CREATE FUNCTION [dbo].[ott_jcsv_contains]
|
|
(
|
|
@groupcode varchar(10)
|
|
,@text varchar(4000)
|
|
,@fragment varchar(500)
|
|
)
|
|
RETURNS bit
|
|
AS
|
|
BEGIN
|
|
DECLARE @RET bit;
|
|
DECLARE @textinput varchar(4000) = REPLACE(ISNULL(@text, ''), ' ', '');
|
|
|
|
IF (@textinput = '' OR @textinput = '{}' OR @fragment = '')
|
|
BEGIN
|
|
SET @RET = 0;
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
|
|
-- Will be true
|
|
-- if any of the fragments exist in the list of text-items
|
|
|
|
DECLARE @Pattern varchar(20) = '%"' + @groupcode + '":"%';
|
|
DECLARE @P0 int = PATINDEX(@pattern, @textinput);
|
|
DECLARE @P1 int = @P0 + LEN(@pattern) -2;
|
|
DECLARE @P2 int = CHARINDEX('"',@textinput,@p1);
|
|
|
|
IF @P0 = 0
|
|
BEGIN
|
|
SET @RET = 0;
|
|
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
DECLARE @text2 varchar(4000) = SUBSTRING(@textinput, @P1, @P2 - @P1);
|
|
|
|
WITH texts as (SELECT * FROM string_split(ISNULL(@text2,''), ','))
|
|
,fragments as (SELECT * FROM string_split(ISNULL(@fragment,''), ','))
|
|
SELECT @RET = CASE WHEN EXISTS (SELECT * FROM texts JOIN fragments ON texts.[value] = fragments.[value]) THEN 1 ELSE 0 END;
|
|
END
|
|
|
|
END
|
|
|
|
RETURN @RET;
|
|
|
|
END
|
|
GO
|
|
ALTER AUTHORIZATION ON [dbo].[ott_jcsv_contains] TO SCHEMA OWNER
|
|
GO
|