所以可以说我在Excel文件中有以下字符串列表:
33000
33100
33010
33110
45050
45150
45250
45350
45360
45370
55360
55370
我有一个SQL表,其中包含此字符串列表以及更多字符串,我想创建一个SELECT语句,仅搜索此字符串列表。
我可以像SELECT * FROM Table WHERE field = '33100' OR field = '33010' ...
这样的蛮力声明。但是,我可以使用LIKE语句来缩小WHERE列表。
我正试图找到一种方法来使LIKE语句的数量尽可能少,因此我需要生成最少数量的SQL模式来标识整个列表。对于上面的列表,最少的SQL模式是:
33[01][01]0
45[0123]50
[45]53[67]0
在输入是字符串列表的情况下,如何动态生成这样的模式列表?
答案 0 :(得分:1)
另一种方法可能更“优雅”,但不会更快。您的字符串以不同的字符开头,因此like
模式的第一部分将是通配符或字符范围-有效地排除了索引的使用。
另一方面,一个简单的in
表达式可以使用索引:
where col in ('33100', '33010', '33110', '45050', ...)
答案 1 :(得分:1)
好的,假设您在Excel中有此数据,该数据从单元格A2开始
在单元格C1中编写以下代码:create table ##TEMP(STRS varchar(20))
在单元格C2中编写以下代码:="insert into ##TEMP"&" values"&" ('"&A2&"' )"&","
在单元格C3中编写以下代码:=" ('"&A3&"'
)“&”,“
##temp
表。 INNER JOIN
与您的表一样
SELECT * FROM MYTABLE M INNER JOIN ##TEMP AS T ON T.STRS = M.COLUMN_NAME_STR
您应该获得所需的数据,希望对您有所帮助。