SQL函数应用问题,很苦恼!!

tu_quan_ren 2009-04-19 01:56:28
1.我建了一张表:sellrecord

column name data type allow null
listnumber nchar(16) no

2.表内容:
listnumber
13-1
13-10
13-100
13-108
13-11
13-15
13-18
13-2
13-3
14-1
14-2
14-69


3.我想按照'-'左边和'-'右边同时排序,可是输出的结果是根本没有排序!!

4.sql语句:
select *
from dbo.SellRecord /*表名*/
order by convert(int,left(ListNumber,charindex('-',ListNumber)--按照'-'左边部分排序
-1) ),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber))))--按照'-'右边排序



5.哪位老师知道其中缘由,还望不吝赐教!!
...全文
55 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tu_quan_ren 2009-04-19
  • 打赏
  • 举报
回复
yeah!!我明白了,多谢,多谢!!
sdhdy 2009-04-19
  • 打赏
  • 举报
回复
--把右边部分SELECT出来,你就明白了,实际上右边那几位都是以空格填充。
select listnumber, right(listnumber,(len(listnumber)-charindex('-',ListNumber))) --右边部分
from dbo.SellRecord /*表名*/
order by convert(int,left(ListNumber,charindex('-',ListNumber)
-1) ),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber))))
/*
listnumber
---------------- ----------------
13-1
13-10
13-100
13-108
13-11
13-15
13-18
13-2
13-3
14-1
14-2
14-69

(所影响的行数为 12 行)
*/
sdhdy 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sdhdy 的回复:]
SQL codecreate table sellrecord(listnumber nchar(16) not null)
go
insert sellrecord select '13-1'
insert sellrecord select '13-10'
insert sellrecord select '13-100'
insert sellrecord select '13-108'
insert sellrecord select '13-11'
insert sellrecord select '13-15'
insert sellrecord select '13-18'
insert sellrecord …
[/Quote]
注释写错了。
--右边写的不对,nchar(16)是一个定长的字符类型,不满16位的以空格填充,所以你要用SUBSTRING函数。
--如果用VARCHAR类型的,就不会有这个问题了。
sdhdy 2009-04-19
  • 打赏
  • 举报
回复
create table sellrecord(listnumber nchar(16) not null)
go
insert sellrecord select '13-1'
insert sellrecord select '13-10'
insert sellrecord select '13-100'
insert sellrecord select '13-108'
insert sellrecord select '13-11'
insert sellrecord select '13-15'
insert sellrecord select '13-18'
insert sellrecord select '13-2'
insert sellrecord select '13-3'
insert sellrecord select '14-1'
insert sellrecord select '14-2'
insert sellrecord select '14-69'
go
--右边写的不对,nvarchar(16)是一个定长的字符类型,不满16位的以空格填充,所以你要用SUBSTRING函数。
--如果用VARCHAR类型的,就不会有这个问题了。
select *
from dbo.SellRecord
order by convert(int,left(ListNumber,charindex('-',ListNumber)-1)),convert(int,substring(ListNumber,charindex('-',ListNumber)+1,len(ListNumber)-charindex('-',ListNumber)))

/*
listnumber
----------------
13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69
(所影响的行数为 12 行)
*/
drop table SellRecord
tu_quan_ren 2009-04-19
  • 打赏
  • 举报
回复
我要的结果就是:
13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69

 
1.先前是因为我把listnumber 列的数据类型设置为nchar(16),
 执行下列语句后:
select *
from SellRecord /*表名*/
order by convert(int,left(ListNumber,charindex('-',ListNumber)--按照'-'左边部分排序
-1) ),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber)))) 

--->输出结果为:(NG)

 13-1
 13-10
 13-100
 13-108
 13-11
 13-15
 13-18
 13-2
 13-3
 14-1
 14-2
 14-69

2.可是如果把listnumber 列的数据类型设置为varchar(16)类型,
 执行下列语句后:
select *
from SellRecord /*表名*/
order by convert(int,left(ListNumber,charindex('-',ListNumber)--按照'-'左边部分排序
-1) ),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber)))) 

--->输出结果为:(ok)

13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69

3.为什么都是char类型,输出结果确实有这么大的差异??
sdhdy 2009-04-19
  • 打赏
  • 举报
回复
create table sellrecord(listnumber nvarchar(16) not null)
go
insert sellrecord select '13-1'
insert sellrecord select '13-10'
insert sellrecord select '13-100'
insert sellrecord select '13-108'
insert sellrecord select '13-11'
insert sellrecord select '13-15'
insert sellrecord select '13-18'
insert sellrecord select '13-2'
insert sellrecord select '13-3'
insert sellrecord select '14-1'
insert sellrecord select '14-2'
insert sellrecord select '14-69'
go
--右边写的不对,nvarchar(16)是一个定长的字符类型,不满16位的以空格填充,所以你要用SUBSTRING函数
--如果用VARCHAR类型,就不会有这个错误了。
select *
from dbo.SellRecord
order by convert(int,left(ListNumber,charindex('-',ListNumber)-1)),convert(int,substring(ListNumber,charindex('-',ListNumber)+1,len(ListNumber)-charindex('-',ListNumber)))

/*
listnumber
----------------
13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69
(所影响的行数为 12 行)
*/
liangCK 2009-04-19
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @sellrecord
DECLARE @sellrecord TABLE (listnumber VARCHAR(6))
INSERT INTO @sellrecord
SELECT '13-1' UNION ALL
SELECT '13-10' UNION ALL
SELECT '13-100' UNION ALL
SELECT '13-108' UNION ALL
SELECT '13-11' UNION ALL
SELECT '13-15' UNION ALL
SELECT '13-18' UNION ALL
SELECT '13-2' UNION ALL
SELECT '13-3' UNION ALL
SELECT '14-1' UNION ALL
SELECT '14-2' UNION ALL
SELECT '14-69'

--SQL查询如下:

SELECT *
FROM @sellrecord
ORDER BY
CONVERT(INT,LEFT(listnumber,CHARINDEX('-',listnumber)-1)),
CONVERT(INT,RIGHT(listnumber,CHARINDEX('-',REVERSE(listnumber))-1))

/*
listnumber
----------
13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69

(12 行受影响)
*/
sdhdy 2009-04-19
  • 打赏
  • 举报
回复
--右边写的不对       
select convert(int,left(ListNumber,charindex('-',ListNumber)-1)),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber))))
from dbo.SellRecord
order by convert(int,left(ListNumber,charindex('-',ListNumber)-1)),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber))))--按照'-'右边排序

/*
----------- -----------
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
13 0
14 0
14 0
14 0

(所影响的行数为 12 行)

*/
liangCK 2009-04-19
  • 打赏
  • 举报
回复
---------------------------------
-- Author: liangCK 小梁
---------------------------------

--> 生成测试数据: @sellrecord
DECLARE @sellrecord TABLE (listnumber VARCHAR(6))
INSERT INTO @sellrecord
SELECT '13-1' UNION ALL
SELECT '13-10' UNION ALL
SELECT '13-100' UNION ALL
SELECT '13-108' UNION ALL
SELECT '13-11' UNION ALL
SELECT '13-15' UNION ALL
SELECT '13-18' UNION ALL
SELECT '13-2' UNION ALL
SELECT '13-3' UNION ALL
SELECT '14-1' UNION ALL
SELECT '14-2' UNION ALL
SELECT '14-69'

--SQL查询如下:

select *
from @SellRecord /*表名*/
order by convert(int,left(ListNumber,charindex('-',ListNumber)--按照'-'左边部分排序
-1) ),convert(int,right(listnumber,(len(listnumber)-charindex('-',ListNumber))))

/*
listnumber
----------
13-1
13-2
13-3
13-10
13-11
13-15
13-18
13-100
13-108
14-1
14-2
14-69

(12 行受影响)
*/
liangCK 2009-04-19
  • 打赏
  • 举报
回复
你预期的结果是怎样的呢?
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者: (美)Ivor Horton 译者: 李颂华 康会光 出版社:清华大学出版社 ISBN:9787302142713 上架时间:2007-2-12 出版日期:2007 年1月 开本:16开 页码:1046 版次:1-1 编辑推荐   本书由编程语言先驱者Ivor Horton倾力而著,是国内第一本全面、深入介绍Visual C++ 2005的经典之作! 内容简介   本书系编程语言先驱者Ivor Horton的经典之作,是学习C++编程最畅销的图书品种之一,不仅涵盖了Visual C++ .NET编程知识,还全面介绍了标准C++语言和.NET C++/CLI。本书延续了Ivor Horton讲解编程语言的独特方法,从中读者可以学习Visual C++ 2005的基础知识,并全面掌握在MFC和Windows Forms中访问数据源的技术。此外,本书各章后面的习题将有助于读者温故而知新,并尽快成为C++高效程序员。...    作译者   Ivor Horton是世界著名的计算机图书作家,主要从事与编程相关的顾问及撰写工作,曾帮助无数程序员步入编程的殿堂。他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。Ivor Horton还著有Beginning Visual C++ 6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual C++ 2005编程 1 1.1 .NET Framework 1 1.2 CLR 2 1.3 编写C++应用程序 3 1.4 学习Windows编程 4 1.4.1 学习C++ 4 1.4.2 C++标准 5 1.4.3 控制台应用程序 5 1.4.4 Windows编程概念 6 1.5 集成开发环境简介 7 1.6 使用IDE 9 1.6.1 工具栏选项 9 1.6.2 可停靠的工具栏 10 1.6.3 文档 11 1.6.4 项目和解决方案 11 1.6.5 设置Visual C++ 2005的选项 23 1.6.6 创建和执行Windows应用程序 24 1.6.7 创建Windows Forms应用程序 26 1.7 小结 29 第2章 数据、变量和计算 31 2.1 C++程序结构 31 2.1.1 程序注释 36 2.1.2 #include指令——头文件 37 2.1.3 命名空间和using声明 37 2.1.4 main()函数 38 2.1.5 程序语句 38 2.1.6 空白 40 2.1.7 语句块 41 2.1.8 自动生成的控制台程序 41 2.2 定义变量 42 2.2.1 命名变量 43 2.2.2 C++中的关键字 43 2.2.3 声明变量 44 2.2.4 变量的初值 44 2.3 基本数据类型 45 2.3.1 整型变量 45 2.3.2 字符数据类型 46 2.3.3 整型修饰符 47 2.3.4 布尔类型 48 2.3.5 浮点类型 48 2.3.6 ISO/ANSI C++中的基本类型 49 2.3.7 字面值 50 2.3.8 定义数据类型的同义词 50 2.3.9 具有特定值集的变量 51 2.3.10 指定枚举常量的类型 52 2.4 基本的输入/输出操作 53 2.4.1 从键盘输入 53 2.4.2 到命令行的输出 53 2.4.3 格式化输出 54 2.4.4 转义序列 55 2.5 C++中的计算 57 2.5.1 赋值语句 57 2.5.2 算术运算 58 2.5.3 计算余数 63 2.5.4 修改变量 63 2.5.5 增量和减量运算符 64 2.5.6 计算
ExtJs简介: Extjs在经过两年的发展,Ext JS从2.0版开始,越来越受用户欢迎,今年,Extjs不但推出3.0版本,而且还推出了Ext Core,准备在Web2.0网站开发中占一席之地,如在 Extjs2.x版本中为人所诟病的速度问题在ExtJs3.0中有所改善。不过,最革命性的改变还是ExtJs中新增的Ext.Direct功能,它实现了服务器端的无关性。 在3.2版本中,Ext将增加移动组件,进军移动市场,这将是一次革命性的改进,同时在4.0版本中,除了对HTML5的支持外,还增加画布功能。 还有一点更值得期待,就是Ext的RAD开发工具也在开发当中。估计在不久之后,也可以向VB,C#一样,通过可视化工具拖拽方式即可轻松开发Web应用。 ExtJs在发展过程中不仅一步步地巩固着自己在HTML、CSS、JavaScript领域无可比拟的优势,而且已经开始向相关领域发展扩张。如从2.02版开始为Adobe的RIA技术AIR提供支持,并且为GWT开发了Ext GWT2.0,这些都体现了ExtJs的强大活力和生命力。 在可预见的未来,ExtJs将会甩开对手,大踏步向前。 ExtJs的前景: ExtJS的前景是非常好的,现在的QQ2009的登录界面以及使用,迅雷最新版的主界面,都能够找到这个框架的踪迹。web QQ也是有一个技术版本是使用这种框架的,所以,可以看出,extjs的应用,是越来越广泛了,extjs的前景,不可估量,不论站在技术开发的层次还是大部分用户的使用体验。 国讯教育通用智能OA办公系统项目培训目标 本系列讲座分为四大部分: 1、ExtJs基础篇:主要介绍Ext Core的一些核心功能 2、ExtJs进阶篇:主要介绍ExtJs里的常用组件,容器及布局 3、ExtJs数据篇:主要介绍和数据库交互的相关组件及CRUD功能 4、项目实战篇: Extjs3.2+ASP.NET七层架构+设计模式+ log4j+WebSerice等技术国讯教育通用智能OA办公平台 适用对象 1、要求有一定的javascript语言和HTML,CSS基础的学员 2、有一定的Asp.net网页编程基础和C#语言基础 3、有志于从事富客户端技术ExtJs的学习与研究的学生及专业Web开发人员 模块介绍 1、ExtJs基础篇-ExtJs快速入门 1.1、ExtJs基础篇(1):ExtJs概述与环境配置及架构剖析 1.2、ExtJs基础篇(2):ExtJs OOP基础 1.3、ExtJs基础篇(3):ExtJs 核心函数简介 1.4、ExtJs基础篇(4):ExtJs中的模板详解(1) 1.5、ExtJs基础篇(5):ExtJs中的模板详解(2) 2、ExtJs进阶篇:Extjs进阶 2.1、大话ExtJs中的布局 2.2、ExtJs的常见组件 2.3、ExtJs中的面板及Window窗口 2.4、ExtJs中的选项卡面板 2.5、ExtJs中的对话框与Combox组件 2.6、ExtJs中的ExtTree详解 3、ExtJs数据篇 3.1、数据存储基本单元Record与DataField详解 3.2、数据存储Store详解1 3.3、数据存储Store详解2 3.4、数据代理DataProxy详解 3.5、数据读取器DataReader详解 3.6、Ext.Direct详解1 3.7、Ext.Direct详解2 4、ExtJs实战篇—国讯教育通用智能OA办公平台 (共70讲) 4.1、系统业务流程主功能结构分析 4.2、数据库设计 4.3、抽象工厂+反射七层架构设计 4.4、首页布局设计 4.5、人事管理模块分析设计 4.6、个人专区模块分析设计 4.7、日程管理区模块分析设计 4.8、文档管理模块分析设计 4.9、工单管理模块分析设计 4.10、工资管理模块分析设计 4.11、内部邮箱模块分析设计 4.12、系统管理模块分析设计 4.13、考勤管理模块分析设计 4.14、消息管理模块分析设计 4.15、日志管理 4.16、报表打印及数据统计 4.17、数据导入导出管理 本项目所涉及到的技术: 数据库方面: 1、PD数据库建模 2、SQL Server2005视图、存储过程、用户自定义函数、触发器 ASP.net方面: 1、ASP.net PetShop七层架构 2、抽象工厂+反射+配置文件实现数据库无缝切换 3、序列化/反序列化+泛型集合的应用 4、利用ASP.net HttpHandler实现防盗链 5、网站安全性方面:ASP.net防SQL注入及Web Service Soap头加密技术 6、AS

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧