这是我的表
ID Name 1 ddd 2 bbb 3 ccc 4 aaa 5 eee
是否有可能进行一个查询,该查询将选择以某个字母开头的数据并获取其后的所有其余内容,并留下其前的其余部分? 按字母顺序。
如果我想选择ccc, ddd, eee
结果应该是这样的......
ID Name 3 ccc 1 ddd 5 eee
答案 0 :(得分:2)
这有效:(见SQL Fiddle)
SELECT * FROM TABLE_NAME
WHERE NAME >=
(SELECT NAME FROM TABLE_NAME
WHERE NAME LIKE 'c%'
ORDER BY NAME ASC --to ensure first name is truly the first
LIMIT 1 --to ensure there's only one value from the subquery
)
ORDER BY NAME ASC
子查询获得与您的第一个字母要求匹配的按字母顺序排列的名字。主查询获取名称匹配的所有行,或者按字母顺序大于子查询结果。
ASC
关键字是多余的,但我想我会说清楚。
LIKE
检查区分大小写。如果您希望它不区分大小写,请使用UPPER(NAME) LIKE 'C%'
或LOWER(NAME) LIKE 'c%'
。您还应该将主查询的 where 子句更改为WHERE UPPER(NAME) >=
或WHERE LOWER(NAME) >=
。
根据AjaySingh's answer,以下内容会更好(效率更高),但您只能匹配第一个字母(更复杂的LIKE
模式仍然需要我的查询)。
SELECT * FROM table_name WHERE name >= 'c' ORDER BY name
请参阅SQL Fiddle。 致AjaySingh到期的信用。
答案 1 :(得分:1)
尝试:
SELECT * FROM @Temp WHERE name > 'c%' ORDER BY name
答案 2 :(得分:-1)
试试这个......
SELECT * FROM TABLENAME WHERE NAME > 'CERTAINLETTER%' ORDER BY NAME
您不应该使用NAME等保留名称作为字段名称。将其更改为类似fldNAME或其他内容。