使用SQL中的另一个字符串检查字符串中每个字符的存在性

时间:2017-04-27 10:07:28

标签: sql sql-server sql-server-2008 tsql

我有一个字符串

@Str1 = '123'

我有另一个字符串

@Str2 = '12345'

如果@Str1中的每个字符都存在于@Str2

,我需要比较两个字符串并返回 1

即使@Str2是' 45132'它必须返回1,

如果@Str2 456 必须返回 0

即使@ Str2是' 45132'它必须返回1

我不建议使用任何功能,因为我的直播表中有100万行。可能我可以避免性能损失。

5 个答案:

答案 0 :(得分:1)

一个快速选项是charindex()的sign()。这将返回1或0。

readystate

返回

Declare @Str1 varchar(25) = '123'
Declare @Str2 varchar(25) = '12345'

Select sign(charindex(@Str1,@Str2))

答案 1 :(得分:1)

使用Zohar在How can I insert each character of a string which is not comma delimited to separate row in a table?

中为您解答的问题

你可以使用:

SELECT CASE WHEN SUM(X)=LEN(@STR) THEN 1 ELSE 0  END AS ALL_PRESENT
FROM (
    SELECT CASE WHEN CHARINDEX( SUBSTRING(@Str, Number, 1), @STR2) >0 THEN 1 ELSE 0 END AS X
    FROM Tally
    WHERE Number <= LEN(@Str)
    ) A

SELECT CASE WHEN COUNT(X)=LEN(@STR) THEN 1 ELSE 0  END AS ALL_PRESENT
FROM (
    SELECT CASE WHEN CHARINDEX( SUBSTRING(@Str, Number, 1), @STR2) >0 THEN 1 END AS X
    FROM Tally
    WHERE Number <= LEN(@Str)
    ) A

输出 使用

DECLARE @STR VARCHAR(10)='123'
DECLARE @STR2 VARCHAR(10)='456123345'

ALL_PRESENT
-----------
1

使用

输出
DECLARE @STR VARCHAR(10)='123'
DECLARE @STR2 VARCHAR(10)='45613345'

ALL_PRESENT
-----------
0

答案 2 :(得分:1)

declare @str1 VARCHAR(20) = '123'
declare @str2 VARCHAR(20) = '12345'


SELECT CASE WHEN EXISTS (
        SELECT 1
        FROM master.dbo.spt_values V 
        WHERE V.type='P' 
            AND V.number    BETWEEN 1 AND LEN(@str1)
            AND CHARINDEX(SUBSTRING(@str1, v.number, 1), @str2) = 0
    ) THEN 0
    ELSE 1
    END

答案 3 :(得分:0)

假设col1类似于@ str1而col2类似于@ str2,那么您的查询可以是

SELECT Col1, Col2, CASE WHEN Col2 LIKE Col1+'%' THEN 1 ELSE 0 END FROM YourTable

不使用任何功能并添加案例

  

即使@ Str2是&#39; 45132&#39;它必须返回1

查询可以像

SELECT Col1, Col2, CASE WHEN Col2 LIKE '%'+ Col1+'%' THEN 1 ELSE 0 END FROM YourTable

答案 4 :(得分:0)

select count(*) from (select '1928345' as Col1) as Table1
where Table1.Col1 like '%1%2%3%'