mysql匹配表中字符串开头的字符串

Woo*_*ody 18 mysql

我意识到,如果我可以在创建表时修改表格会更容易,但假设我不能,我有一个表格如下:

abcd
abde
abdf
abff
bbsdf
bcggs
... snip large amount
zza
Run Code Online (Sandbox Code Playgroud)

表中的值不是固定长度.我有一个匹配的字符串,如abffagpokejfkjs.如果是相反的话,我可以做到

SELECT * from table where value like 'abff%'
Run Code Online (Sandbox Code Playgroud)

但我需要选择与提供的字符串的开头匹配的值.

有没有快速的方法,或者是否需要通过表格进行迭代才能找到匹配?

Mar*_*ers 39

试试这个:

SELECT col1, col2 -- etc...
FROM your_table
WHERE 'abffagpokejfkjs' LIKE CONCAT(value, '%')
Run Code Online (Sandbox Code Playgroud)

请注意,这不会有效地使用索引,因此如果您有大量记录,它将会很慢.

还要注意,value(例如%)中的某些字符可能被LIKE解释为具有特殊含义,这可能是不期望的.


Too*_*eve 15

LIKE可以通过将比较字符串截断为每个值的长度来避免:

... WHERE LEFT('abffagpokejfkjs', LENGTH(value)) = value
Run Code Online (Sandbox Code Playgroud)

  • 我必须使用“CHAR_LENGTH”。`LENGTH` 返回字节数,如果是非 ASCII 字符串,则可能不需要该值。 (2认同)