mysql的转义顺序和操作顺序

时间:2010-11-11 01:43:51

标签: mysql

我正在对包含值的表运行查询,其中一些形式为“jsFunc('H:\\ directory \\ subdir \\ whatever.ext')”,其他形式为“jsFunc('\ \\\ ServerName \\ directory \\ subdir \\ whatever.ext')“以及许多其他随机字符串项。

我想选择格式为“H:\\ directory \\ subdir”

的任何内容

继承我的询问......

SET @s = 'H:\\\\directory';
SELECT * FROM 'db'.'table' WHERE column LIKE CONCAT('%',@s,'%')

没有产生任何结果。我没有使用变量/ concat尝试过这个。

一些产生结果的值,一些不产生结果(但我认为应该产生)

@s = 'H:';              /*   returned rows*/
@s = 'H:\\';            /*no returned rows*/
@s = 'H:\\\\';          /*   returned rows*/
@s = 'H:\\\\directory'; /*no returned rows*/

@s = '\\\\directory';           /*   returned rows*/
@s = '\\\\directory\\\\subdir'; /*no returned rows*/

/* and worse of all... */

@s = 'H:\\\\directory\\\\subdir'; /*no returned rows. these are the rows I want*/

起初我认为逃避操作的顺序可能会导致问题,因此连接'%'以确保它们没有被转义,但似乎没有区别。在这里有什么样的逃避伏都教,我失踪了吗?

2 个答案:

答案 0 :(得分:2)

你应该做@s = 'H:\\'; select @s;
然后你会意识到你需要加倍+双重逃脱才能实现类似的搜索 string H:\\ => H:\\\\\\\\

答案 1 :(得分:0)

尝试以下

SELECT * FROM table WHERE列LIKE('%% H:\\ directory \\ subdir %%')