2014-01-07 74 views
-1

其餘這是我的表SQL查詢如何選擇特定的數據並輸出結果

 
ID  Name 
1  ddd 
2  bbb 
3  ccc 
4  aaa 
5  eee 

是否有可能使一個查詢,將選擇具有一定的字母開頭的數據,並得到所有跟隨它的其餘部分,並留下它之前的其餘部分? 按字母順序。

什麼是查詢,如果我要選擇ccc, ddd, eee

結果應該是這樣..

 
ID Name 
3  ccc 
1  ddd 
5  eee 
+0

>Ç??????????? – Strawberry

+0

@ user3167278:'ORDER BY'? –

回答

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 UPPER(NAME) >=WHERE LOWER(NAME) >=


基於AjaySingh's answer,下面會工作得更好(更有效),但你只限於只匹配第一個字母(更復雜LIKE模式仍然需要我上面的查詢)。

SELECT * FROM table_name WHERE name >= 'c' ORDER BY name 

請參閱SQL Fiddle積分到AjaySingh凡到期。

+1

先生,你是一個邪惡的天才。 –

+0

哦,你們加拿大人對你的恭維很慷慨'^ _ ^' – ADTC

+0

這真的有很大的幫助! tnx^___ ^ – user3167278

1

嘗試:

SELECT * FROM @Temp WHERE name > 'c%' ORDER BY name 
+0

這種工作也是(並且執行計劃比我的更好),除非你必須改變條件爲'> ='c''才能更正確。因爲(a)運算符'>'不支持'%'模式匹配(b),所以可能有一行其中的值只是'c'。參見[Fiddle](http://sqlfiddle.com/#!2/ada7d2/5)。 – ADTC

-1

嘗試......

SELECT * FROM TABLENAME WHERE NAME > 'CERTAINLETTER%' ORDER BY NAME 

您不應該使用保留的名稱,例如NAME作爲字段名稱。將其改爲像fldNAME之類的東西。

+0

哦,對不起,我不明白這個問題。已經編輯它。 –

相關問題