我有一个文本文件包含大约300行,每行包含邮政编码的前3个字符。这样,
M2X
I5D
T8I
O0P
K6R
我正在寻找在我的查询Where
子句中使用此列表的最佳方法,以匹配此列表中的第3位数字的所有记录。
如何准备好TXT文件,然后创建一个数组,然后在Where
更新我的答案:
WHERE POST regexp '^(M2X|I5D|T8I|.....)'
WHERE POST rlike '^(M2X|I5D|T8I|.....)'
您可能要为此使用SQL IN ( )
谓词。
您希望它看起来像:
WHERE post_code IN ('M2X','I5D','T8I','O0P','K6R',...)
可以用各种脚本语言将文本线文件转换为该格式。例如,sed and Awk:
sed -e "s/.*/'&'/" postal_codes.csv | awk 'BEGIN { ORS="," } { print }' | sed "s/,$//"
'M2X','I5D','T8I','O0P','K6R'
如果您只希望数据的前三个字符匹配邮政编码,换句话说,就好像它们是前缀一样,可以尝试以下操作:
WHERE LEFT(post_code, 3) IN ('M2X','I5D','T8I','O0P','K6R',...)
具有无法使用索引搜索的缺点。
另一个选项是使用模式匹配,如果您在前缀上搜索,它将使用索引。但这使查询相当长:
WHERE post_code LIKE 'M2X%'
OR post_code LIKE 'I5D%'
OR post_code LIKE 'T8I%'
OR post_code LIKE 'O0P%'
OR post_code LIKE 'K6R%'
OR ...
,或者您可以将300个邮政编码集(末尾带有%
通配符)加载到一个临时表中,然后加入:
SELECT ...
FROM mytable JOIN tmp_post_codes
ON post_code LIKE post_code_pattern