sql query:如果字段是键的前缀

时间:2013-11-25 20:30:54

标签: sql

我的桌子上有几条记录。 我想得到所有记录,其中字段“x”是某个键的前缀。换一种说法 假设我有3条记录,其中第一条记录中的字段“x”为 abc ,第二条 abcd ,第三条的 XYZ 即可。我希望获得所有记录,其中x是 abcdefg 的前缀。

    |--------x--------|
    |_________________|
   1|-----abc---------|
   2|-----abcd--------|
   3|-----xyz---------|

我想选择字段x的值是abcdefg的前缀的记录,我可以写类似

的内容
select *
from table
where x in (a, ab, abc, abcd, abcde, abcdef, abcdefg)

但是有更好的解决方案

2 个答案:

答案 0 :(得分:1)

使用MS SQL Server:

select * from [tablex] where left([x], 1) = 'a' and charindex([x], 'abcdefg') = 1

或者只是:

select * from [tablex] where charindex([x], 'abcdefg') = 1

http://sqlfiddle.com/#!3/111a3/1

答案 1 :(得分:1)

对于Postgres(这是标准SQL):

WHERE 'abcdefg' LIKE x || '%'

对于Oracle,MySQL,Postgres:

WHERE 'abcdefg' LIKE CONCAT(x,'%')

对于SQL-Server:

WHERE 'abcdefg' LIKE x + '%'

但你有什么,即:

WHERE x IN ('', 'a', 'ab', 'abc', 'abcd', 'abcde', 'abcdef', 'abcdefg')

可能是最有效的解决方案,几乎可以在所有DBMS中使用。