sql 中 like 语句的用法?

哎呀,说起SQL中的LIKE语句,当时其实遇到了很多坑。
记得有一次,我负责一个项目,需要过滤数据库中所有从“2 01 9 ”开始的订单号。
我当时写了一个查询语句,也有点真实。

我写的是这样的:SELECT FROM ORDERS WHERE order_number LIKE '2 01 9 %';
结果发现,虽然很多订单号都是以'2 01 9 '开头,但是后面的数字却不是我想要的。
原来我想当然地认为LIKE后面加百分号可以匹配任意长度。
因此,它仅匹配以“2 01 9 ”开头的字符串。

后来查了资料,发现LIKE后面必须加下划线“_”才能匹配任意字符。
我赶紧改了查询语句: SELECT FROM ORDERS WHERE order_number LIKE '2 01 9 _%';
这次是正确的,所有以 '2 01 9 ' 开头的订单号都被过滤掉了。

还有一次,一位同事让我帮忙验证所有包含“ABC”或“ABD”的记录。
我当时写了这样一条语句: SELECT FROM RECORDS WHERE LIKE RECORD '%ABC%';
结果,很多含有'ABCD'的记录也被过滤掉了,这显然是我们不希望的。
后来我意识到应该用方括号“[]”来指定匹配的字符集。
于是我又改了: SELECT FROM RECORDS WHERE LIKE RECORD '%[AB]C%';
没错,只过滤包含'ABC'或'ABD'的记录。

至于转义符,我用的不多。
这个废话我不敢说,因为我记得有一次我想用转义字符,但是我用错了,查询结果完全错误。
所以我不会在这里做任何伎俩。
有兴趣的朋友可以自行研究。

sql 中 like 语句的用法?

哎呀,这个LIKE真是烦人啊。
有时在尝试使用它时会卡住。
比如我2 02 2 年去上海询价是吧?您需要使用 test_like 表,它有一个 like_value 字段。
我查了一下LIKE'1 2 3 4 _',哈,这是什么意思?看起来它正在寻找 1 2 3 4 后跟任何字符,不是吗?结果只有一行,这是 1 个受影响的行。

然后,我又尝试了LIKE'1 2 3 4 5 %'。
这是什么?看起来从 1 2 3 4 5 开始并不重要,之后发生什么,对吧?结果 2 行,这是受影响的 2 行。

接下来,LIKE'abc[ad]',我后来意识到了这一点。
方括号[]正在查找a或d,因此abc或abcd可以工作,但结果仍然是2 行。

最麻烦的就是转义符,ESCAPE'!',这个!'%,好像是对待!作为普通字符,所以LIKE'%!%',结果是2 行。
有时需要限制转义,例如LIKE'%!_%'ESCAPE'!'。
这是查找以!_开头的单词,结果为1 行。

也许我有偏见,认为LIKE太复杂了,但它确实非常有用。
就是这样。