sql 数字与字符串 混合排序 求指教~~~~~~~
时间:2011-12-23
来源:互联网
数据表 tbProductData
字段 CardCode
数据 1,10,11,12,2,20,22,3,30,W2,W3 <直接按字段排序结果>
排序 1,2,3,10,11,12,20,22,30,W3,W4 <最后结果>
问题1: 想了2个方法,没这样用过,不知道怎样可以不?
问题2: 还有其他方法?
--方法1:
--还是字符串的排序,有W的排最后,Len() 长度比较,当出现W时,增加其长度保证其长度能排到最后
Select * From tbProductData
where tbProductData.ListID='5EF8D369-B15E-4837-BE13-F589960B895E'
and tbProductData.SectionNo='14'
Order By
Len
(
Case
When tbProductData.CardCode Like 'W%' then tbProductData.CardCode+'撑长度撑长度'
else tbProductData.CardCode
end
),tbProductData.CardCode
--方法2:
--数字排序,格式转换,当出现W时 转换成 999999 保证起比其他数字大能排到最后
Select * From tbProductData
where tbProductData.ListID='5EF8D369-B15E-4837-BE13-F589960B895E'
and tbProductData.SectionNo='14'
Order By
Convert(int,
(
Case
When tbProductData.CardCode Like 'W%' then '999999'
else tbProductData.CardCode
end
)),tbProductData.CardCode
字段 CardCode
数据 1,10,11,12,2,20,22,3,30,W2,W3 <直接按字段排序结果>
排序 1,2,3,10,11,12,20,22,30,W3,W4 <最后结果>
问题1: 想了2个方法,没这样用过,不知道怎样可以不?
问题2: 还有其他方法?
--方法1:
--还是字符串的排序,有W的排最后,Len() 长度比较,当出现W时,增加其长度保证其长度能排到最后
Select * From tbProductData
where tbProductData.ListID='5EF8D369-B15E-4837-BE13-F589960B895E'
and tbProductData.SectionNo='14'
Order By
Len
(
Case
When tbProductData.CardCode Like 'W%' then tbProductData.CardCode+'撑长度撑长度'
else tbProductData.CardCode
end
),tbProductData.CardCode
--方法2:
--数字排序,格式转换,当出现W时 转换成 999999 保证起比其他数字大能排到最后
Select * From tbProductData
where tbProductData.ListID='5EF8D369-B15E-4837-BE13-F589960B895E'
and tbProductData.SectionNo='14'
Order By
Convert(int,
(
Case
When tbProductData.CardCode Like 'W%' then '999999'
else tbProductData.CardCode
end
)),tbProductData.CardCode
作者: jinhai0411 发布时间: 2011-12-23
你要排序成什么样子?
作者: fredrickhu 发布时间: 2011-12-23
下文是 结果如何!
作者: szstephenzhou 发布时间: 2011-12-23
排序 1,2,3,10,11,12,20,22,30,W3,W4 <最后结果>
当字符只有数字: 转成数字 排序
当包含字母 : 放到最后 按字符串排序
1 W1 2 21 W3 5
排序成 1 2 5 21 W1 W3
当字符只有数字: 转成数字 排序
当包含字母 : 放到最后 按字符串排序
1 W1 2 21 W3 5
排序成 1 2 5 21 W1 W3
作者: jinhai0411 发布时间: 2011-12-23
問題一:你的兩種方法都可以~(如果只有前面第一位字符是'W'的情況下)
問題二:
SQL code
問題二:
SQL code
select CardCode from (select CardCode,replace(tbProductData.CardCode,'W','999999') as tmp from tbProductData ) as a order by cast(tmp as int) --也是如果只有前面第一位字符是'W'的情況下
作者: sjcss 发布时间: 2011-12-23
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28