按名称排序,但忽略引号?

时间:2009-09-17 16:39:34

标签: php mysql

是否仍然按名称对列进行排序,并忽略作为某些项的引号?

例如:

“这很酷”

另一篇文章

第2条

你好

将排序为:

另一篇文章

第2条

您好

“这很酷”

报价已在数据库中......

5 个答案:

答案 0 :(得分:5)

取决于您使用的语言。在MS SQL中,我使用REPLACE命令。因此,如果我有一个表,用户,我正在排序的列名,我这样做会删除字符串中的所有双引号:

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

答案 1 :(得分:3)

一种可接受的技巧,比基于TRIM()或REPLACE()的解决方案更快,只关注第一个字符是引号(或者扩展名为非字母数字字符)。

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

通常,对于更大的数据集,这种处理应该在加载时完成,例如添加用于查询目的的列而不是用于显示目的的列。

答案 2 :(得分:2)

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

答案 3 :(得分: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中,我通过将'替换'在'1st&最后一个字符''。当然,只有当col length> = 2时才有效。

答案 4 :(得分:0)

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