2009-09-17 128 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 

一般地,对于更大的数据集,这种处理应当在加载时执行,例如通过添加列的查询目的,而不是列用于显示目的。