首页 新闻 搜索 专区 学院

sql排序 数字+汉字 汉字永远在最后

0
[待解决问题]

想让数字按倒序排序,没有数字的永远在最后面,sql语句怎么写,结果如:500kv莱阳站 500kv   220kv 220kv  平润风电

恋人星空的主页 恋人星空 | 菜鸟二级 | 园豆:260
提问于:2015-03-04 10:18
< >
分享
所有回答(6)
0

http://www.cnblogs.com/shuai/archive/2010/05/25/1743278.html

http://www.aspxhome.com/database/mssql/20104/1373723.htm

参考下

LanJerry | 园豆:168 (初学一级) | 2015-03-04 10:37

感觉按第二种解决方案,如果数据量稍大点,数据库会被拖死。

个人建议从实际需求出发,在录入数据时做分类和拆分比较好。

比如:将文字、数字、数字+文字 分为3类,然后对类别进行排序。

 

途牛旅游网招java、前端、架构、研发经理感兴趣欢迎联系我或者邮件 wuhuanhong@tuniu.com。

支持(0) 反对(0) 红色壁虎 | 园豆:202 (菜鸟二级) | 2015-03-04 11:01
0

设计师的问题要工程师来解决,这个世道......

问题要从源头抓起,提高油品质量,把煤洗干净,要不然你需要花多十倍百倍治理雾霾。

爱编程的大叔 | 园豆:30698 (高人七级) | 2015-03-04 12:34
0

你在这个表里面在加入一个字段专门用来排序吧,然后你就可以先按照这个字段排序,在按照你的sub1排序,这样效率高,而且就算以后有人要求你改变排序,也会很方便的

刘宏玺 | 园豆:14006 (专家六级) | 2015-03-04 16:48
0

个人表示比较蛋疼,给出一个示例,你可以改进为按字母打头的正确方法。

IF NOT OBJECT_ID('[ChineseSort]') IS NULL
    DROP TABLE ChineseSort
GO
CREATE TABLE ChineseSort(
[TID] INT IDENTITY(1,1) PRIMARY KEY,
[TITLE] NVARCHAR(100))
GO

--truncate table ChineseSort;
INSERT ChineseSort
SELECT '500K天上人间' UNION ALL
SELECT '鸟巢' UNION ALL
SELECT '五棵松' UNION ALL
SELECT '200K龙宫'  
GO

SELECT
    *
FROM ChineseSort
ORDER BY TITLE DESC;
/*
3    五棵松
2    鸟巢
1    500K天上人间
4    200K龙宫
*/

/**** 创建一个函数 *************/

IF OBJECT_ID (N'dbo.RegexMatch') IS NOT NULL
   DROP FUNCTION dbo.RegexMatch
GO
CREATE FUNCTION dbo.RegexMatch
    (
      @pattern VARCHAR(2000),
      @matchstring VARCHAR(8000)--Varchar(8000) got SQL Server 2000
    )
RETURNS INT
/* The RegexMatch returns True or False, indicating if the regular expression matches (part of) the string. (It returns null if there is an error).
When using this for validating user input, you'll normally want to check if the entire string matches the regular expression. To do so, put a caret at the start of the regex, and a dollar at the end, to anchor the regex at the start and end of the subject string.
*/ 
AS BEGIN
    DECLARE @objRegexExp INT,
        @objErrorObject INT,
        @strErrorMessage VARCHAR(255),
        @hr INT,
        @match BIT

    SELECT  @strErrorMessage = 'creating a regex object'
    EXEC @hr= sp_OACreate 'VBScript.RegExp', @objRegexExp OUT
    IF @hr = 0 
        EXEC @hr= sp_OASetProperty @objRegexExp, 'Pattern', @pattern
        --Specifying a case-insensitive match 
    IF @hr = 0 
        EXEC @hr= sp_OASetProperty @objRegexExp, 'IgnoreCase', 1
        --Doing a Test' 
    IF @hr = 0 
        EXEC @hr= sp_OAMethod @objRegexExp, 'Test', @match OUT, @matchstring
    IF @hr <> 0 
        BEGIN
            RETURN NULL
        END
    EXEC sp_OADestroy @objRegexExp
    RETURN @match
   END
GO

/**********查询   ********/

SELECT
    title
    FROM dbo.ChineseSort
ORDER BY dbo.RegexMatch('[u4e00-u9fa5]', title) DESC,title DESC;
/****************************
500K天上人间
200K龙宫
五棵松
鸟巢
**********************/
邀月 | 园豆:25375 (高人七级) | 2015-03-20 17:18
0

CREATE TABLE ChineseSort( [TID] INT IDENTITY(1,1) PRIMARY KEY, [TITLE] NVARCHAR(100)) GO

--truncate table ChineseSort;

INSERT ChineseSort SELECT '500K天上人间' UNION ALL SELECT '鸟巢' UNION ALL SELECT '五棵松' UNION ALL SELECT '200K龙宫' 


;
with
tmp as ( select *,case when ascii(TITLE) < 128 then 1 else 0 end orderby from ChineseSort ) select * from tmp order by orderby desc,TITLE desc
.悟 | 园豆:213 (菜鸟二级) | 2015-06-04 22:11
0

可以把表分为两张表,一张有数字在前,一张没数字在前,然后在排序,再把两张表合并起来就行了。

Merger | 园豆:225 (菜鸟二级) | 2017-04-12 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册