我有一个字符串
@Str1 = '123'
我有另一个字符串
@Str2 = '12345'
如果@Str1
中的每个字符都存在于@Str2
即使@Str2
是' 45132'它必须返回1,
如果@Str2
456 必须返回 0
即使@ Str2是' 45132'它必须返回1
我不建议使用任何功能,因为我的直播表中有100万行。可能我可以避免性能损失。
答案 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%'