我的桌子上有几条记录。 我想得到所有记录,其中字段“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)
但是有更好的解决方案
答案 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
答案 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中使用。