2009-09-17 66 views
2

有沒有辦法按名稱對列進行排序,並忽略某些項目的引號?按名稱排序,但忽略引號?

例如:

「這是酷」

另一篇文章

第2條

你好

能夠時不時爲:

另一篇文章

第2條

你好

「這是酷」

的報價已經在數據庫中...

回答

2
SELECT * FROM yourTable ORDER BY TRIM(BOTH '"' FROM title); 
+0

工作很好! – kylex 2009-09-17 17:06:13

+0

這對大型數據集來說會很慢! – jor 2016-12-22 08:14:42

+0

對於更復雜的要求,另一種選擇是預先規劃表格以包含專用列以進行排序以保存預處理版本的值。例如,存儲'name =「Strange Love博士」'和'name_sort =「愛,Strage,Dr.」' – Afilu 2017-12-03 17:23:17

1
SELECT * 
FROM table 
ORDER BY CASE WHEN len(col) >= 2 
       THEN REPLACE(LEFT(COL, 1), '"', '') 
       + RIGHT(LEFT(col, LEN(col)-1), LEN(LEFT(col, LEN(col)-1))-1) 
       + REPLACE(RIGHT(col, 1), '"', '') 
       ELSE col 
     END 
ORDER BY

,我通過將第一個&中的最後一個字符替換爲''來消除雙引號。當然,只有當col length> = 2時纔有效。

5

取決於您使用的是哪種語言。在MS SQL中,我使用REPLACE命令。所以,如果我有一個表,用戶與我排序的列名,我這樣做是它剝離了所有的雙引號出的字符串:

SELECT  * 
FROM   dbo.Users 
ORDER BY REPLACE(firstName, '"', '') 
+0

REPLACE將刪除名稱中的所有引號。 – 2009-09-17 16:50:07

+2

你說得對。但它只在排序時將其刪除,而不是從數據本身刪除。似乎kylex只是想排除一切而不引用。所以這會排序的東西,如: Ar「Ticle 3 不好的例子,但這就是我現在所能想到的。無論哪種方式,因爲它不影響返回的數據,我不認爲會有問題 – JohnathanKong 2009-09-17 16:53:24

+0

但它不會影響排序順序嗎? – 2009-09-17 16:56:36

0
SELECT name 
FROM myTable 
ORDER BY replace(name, '"', '') 
3

一個把戲可能是可以接受的,並且比基於TRIM()或REPLACE()的解決方案更快地只關注作爲引用的第一個字符(或通過擴展名爲非字母數字字符)。

ORDER BY CASE LEFT(myCol, 1) 
     WHEN '"' THEN REPLACE(myCol, '"', '') 
     ELSE myCol 
    END CASE 

一般地,對於更大的數據集,這種處理應當在加載時執行,例如通過添加列的查詢目的,而不是列用於顯示目的。