如何查询我是否要检查字符串是否包含任何顺序的数字(字符),如 1、2、3、4、5、6、7。可以通过在第 1,2 号的子句上编写AND
语句来实现,如下所示,LIKE
Where days like '%1%' and days like '%2%' ...... So on
是否有任何查询检查字符串中存在的特定字符。或者上面的例子如何通过简写查询来实现。请帮忙。谢谢。
如何查询我是否要检查字符串是否包含任何顺序的数字(字符),如 1、2、3、4、5、6、7。可以通过在第 1,2 号的子句上编写AND
语句来实现,如下所示,LIKE
Where days like '%1%' and days like '%2%' ...... So on
是否有任何查询检查字符串中存在的特定字符。或者上面的例子如何通过简写查询来实现。请帮忙。谢谢。
一种方法是创建一个包含您想要搜索的所有字符串的表。
例如
DECLARE @searchstr TABLE (s VARCHAR(10))
INSERT INTO @searchstr VALUES ('1'),('2'),('3'),('4'),('5'),('6'),('7')
DECLARE @tbl TABLE (days VARCHAR(100))
INSERT INTO @tbl VALUES ('1234567'),('123'),('1122334'),('7654321')
SELECT t.days
FROM @tbl t
LEFT JOIN @searchstr s
ON t.days LIKE '%' + s.s+ '%'
GROUP BY t.days HAVING COUNT(DISTINCT s.s) = 7
我会isnumeric
用来确保它们都是数字,然后测试 0、8 或 9 而不是 1-7,因为它更短。
不会CONTAINS()为您工作吗?
还要注意如何将 word 拆分为 char array。
您可以使用 CHARINDEX
CHARINDEX(stringthatcontainschars1, '1', numofpositiontostartlookingat)
Output: 24, the position that your searched for char is at. returns zero if not found
如果您要在列或字符串中查找数字 1,您可以输入:
CHARINDEX(columnname, '1', 1)
This would search for '1' beginning at position 1.
您可以根据它是否返回 0 来确定 char 是否在字符串中,然后编写您需要的任何代码来执行条件语句。
我建议调查一下[PATINDEX][1]
。来自 MSDN:
在所有有效的文本和字符数据类型上,返回指定表达式中第一次出现模式的起始位置,如果未找到该模式,则返回零。
你可能最终会使用类似的东西WHERE PATINDEX(%[0-9]%', foo) > 0
如果天是昏迷分开的,你可以使用FIND_IN_SET
SELECT FIND_IN_SET(1, days) AND FIND_IN_SET(2, days);
它是不同的,不是更好,但据我所知,没有其他原生方式。LIKE 可能会比 find_in_set 快得多