得分字段为varchar
那么按得分排序得到的结果可能是:
1
10
11
123
1234
2
25
253
3
但是我们想要按照数字排序
1
2
3
10
11
25
123
1234
253
这时候只需要
一种 、
数字字符串为01 0100 02 0200 一排序就是这个顺序,我想要变成01 02 0100 0200 就用下面这个办法
把这个字段转为int 然后再排 序就对了。
ORDER BY CAST(字段名 AS DECIMAL)
另一种
假如你要排序的字段名为 mynum,
如果 mynum 是 int 型,直接排序即可: order by mynum
如果 mynum 是 string 型,但存的是数值,并且要出现你说的自然排序效果的话,要这样做: order by mynum+0
m/benweet/stackedit
最后一种
使用MySQL绝对值函数ABS,它告诉MySQL使用绝对值来处理处理这个字段:
ORDER BY ABS(字段名)
得分字段为varchar 那么按得分排序得到的结果可能是: 1 10 11 123 1234 2 25 253 3 但是我们想要按照数字排序 1 2 3 10 11 25 123 1234 253这时候只需要 一种 、 数字字符串为01 0100 02 0200 一排序就是这个顺序,我想要变成01 02 0100 0200 就用下面这个办法 把这个字段转
需求是这样的:
数据库表里面有一个
字段
类
型
是nvachar,存的值是
数字
和
字符
混合的,要
实现
先按
数字
排序
,再按字母倒序。思路:
考虑这个
字段
的值是否是有规律可循的,把要按
数字
排序
的部分转换为
数字
,再把剩下的
字符
排序
。数据表是下面这样的:LevelName就是那个
数字
和字母混合的
字段
。
我这个表里存的LevelName都是
数字
+单个
字符
的格式。于是可以把前面的部分转换为
数字
,按
数字
排,剩下的部分
因项目需要,需对
字符
串
型
数字
进行
排序
SQL
语句:
SELECT transactionGmv6Months FROM company WHERE categoryId='127726077' ORDER BY LENGTH(transactionGmv6Months),transactionGmv6Months;
查询结果:
将长度一致的
字符
串先
排序
,再按照
字符
串的ASCII码
排序
对
字符
型
或
字符
串类
型
的数据按数值的大小进行
排序
所遇的问题: 当对数据类
型
为varchar 的数据进行
排序
时,
排序
得到的结 果达不到预期的效果
1,3,6,15,16
排序
得到是: 1,15,16,3,6
预期的
排序
结果是: 1,3,6,15,16
解决方案: 将
字符
型
数据转换为number类
型
在去
排序
即可,一般将
字段
+1或
字段
*1就行。
#原
sql
select * from stu_table order by stu_
在做项目的过程中会遇到不同情况的
排序
,如对某个
字段
根据该
字段
的不同值进行
排序
:
如需要对一张表的status
字段
按照1,0,2的顺序
排序
,这个时候就不能使用传统的asc进行
排序
了:
select * from t where type = 2 order by status asc;
而是要按照该
字段
的值进行
排序
:
select * from ttt where type = 2 OR...
用户自己定义动态组织
sql
查询条件,对于用户来说相当方便的啦。可以自由选择查询
字段
、条件条件、条件值,选择与或关系,包括括号优先的使用。根据查询
字段
不同,查询条件值的动态改变,如日期控件、下拉框、可输入的文本框。参考使用的童鞋可以再优化下,使之更人性化。
呵呵。折腾一天弄出来的,个人觉得很实用,不足之处,很自行修改。
童鞋们大力给分啊,大哥也下载东东需要积分啊。
用户使用说明:
1.当条件值是日期时,格式为:2013-01-01;
2.当条件值是
字段
串时,中间含有英文单引号“'”时,请用两个单引号“''”表示,如:AA''A ;
3.当条件为“包含”或“不包含”时,条件值不能是日期格式 ;
4.当条件为“包含”或“不包含”时,条件值是
字符
串类
型
用单引号“'”引起来,多个数据项时用逗号分隔,如:'AAA','BBB';
5.当条件为“包含”或“不包含”时,条件值是
数字型
时则不需要单引号“'”,多个数据项时用逗号分隔如:100,120;
6.当条件为“大于”或“小于”时,条件值只能是
数字型
或日期
型
,否则查询结果将可能不准确;
7.如果使用括号,请务必保证括号匹配;
8.条件值尽量避免有“'、%”等特殊
字符
;
1、将Int 转为varchar经常用 concat函数,比如concat(8,’0′) 得到
字符
串 ’80’ 2、将varchar 转为Int 用 cast(a as signed) a为varchar类
型
的
字符
串 总结:类
型
转换和
SQL
Server一样,就是类
型
参数有点点不同 : CAST(xxx AS 类
型
) , CONVERT(xxx,类
型
) 可用的类
型
二进制,同带binary前缀的效果 : BINARY
字符
型
,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期时间
型
: DATETIME 浮点数 : DECIMAL 整数 : SIGNED 无符号整数 :
使用全文搜索查询数据
在数据库中快速搜索数据,使用索引可以提高搜索速度,然而索引一般是建立在
数字型
或长度比较短的文本
型
字段
上的,比如说编号、姓名等
字段
,如果建立在长度比较长的文本
型
字段
上,更新索引将会花销很多的时间。如在文章内容
字段
里用lik e 语句搜索一个关键字,
当数据表里的内容很多时,这个时间可能会让人难以忍受。
在
SQL
Server 中提供了一种名为全文索引的技术,可以大大提高从长
字符
串里搜索数
据的速度,在本章里,将会对全文索引进行详细的介绍。
例如:select (a+b) as c from 表 类
型
也一致都是varchar
型
的,可就是显示不正确。 直到concat() My
SQL
中concat函数 下面通过一个例子介绍My
SQL
中的concat函数的使用
方法
,比如select concat(’11’,’22’,’33’)。 My
SQL
中concat函数 使用
方法
: CONCAT(str1,str2,…) 返回结果为连接参数产生的
字符
串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制
字符
串,则结果为非二进制
字符
串。 如果自变量中含有任一二进制
字符
串,则结果为一个二进制
字符
串。 一个
数字
参数被
1. 熟悉大
型
数据库实验环境,以MS
SQL
SERVER为例。
2. 掌握MS
SQL
SERVER的企业管理器的用法。
3. 能够根据给定的设计要求,设计数据库和数据库表结构。
4. 能够使用MS
SQL
SERVER的企业管理器完成数据库创建和表创建等操作。
5. 能够往表中添加数据记录。
二、实验内容
(1)创建数据库
1. 数据库名字为:abc;
2. 此数据库包含两个数据文件,其中主数据文件的逻辑文件名为:Data1,物理文件名为Data1_data.mdf,初始大小为3MB,存放在新建目录下,增长方式为自动增长,每次增加1MB,最多增长到10MB。辅助数据文件的逻辑文件名为:Data2,物理文件名为Data2_data.ndf,初始大小为2MB,同主数据文件存放在相同的位置,不自动增长。
3. 日志文件的逻辑文件名为:log1,物理文件名为log1_log.ldf,初始大小为2MB,同主数据文件存放在相同的位置,增长方式为自动增长,每次增加15%。
(2) 创建表
为描述销售人员对产品的销售情况,定义了三张表:销售人员表、产品表和销售情况表,分别用于描述销售人员的基本信息、产品的基本信息和销售人员与产品之间的销售情况。写出在 “abc”数据库中定义这三张表的语句并创建这三张表,(请将语句以文件形式保存下来,文件名为“考生名.
sql
”,存放在新建的目录下。可以将下述所有的
SQL
语句均保存到此文件中,在文件中要注明题号),三张表的结构为:
注:括号中为表名和列名的拼音表示,建表时用拼音表示表名和列名即可。
1. 销售人员表(XSRYB)包括如下
字段
:
职工号(ZGH):普通编码定长
字符
型
,6位长,主码
姓名(XM):普通编码定长
字符
型
,10位长,非空
年龄(NL):整
型
,取值范围为20 ~ 60,允许空
地区(DQ):普通编码可变长
字符
型
,10位长,允许空
邮政编码(YZhBM):普通编码定长
字符
型
,6位长,每一位必须是
数字
,允许空
2. 产品表(CPB)包括如下
字段
:
产品号(CPH):普通编码定长
字符
型
,6位长,主码
产品名(CPM):普通编码可变长
字符
型
,20位长,非空
生产厂家(SCCJ):普通编码定长
字符
型
,10位长,非空
价格(JG):整
型
,大于0,允许空
生产日期(SCRQ): 小日期时间
型
(SmallDatetime),允许空,默认为系统当前日期
3. 销售情况表(XSQKB)包括如下
字段
:
职工号(ZGH):普通编码定长
字符
型
,6位长,非空
产品号(CPH):普通编码定长
字符
型
,6位长,非空
销售日期(XSRQ):小日期时间
型
,非空
销售数量(XSSL):整
型
,允许空
其中:(职工号,产品号,销售日期)为主码
职工号为引用销售人员表的外码,产品号为引用产品表的外码。
(3) 在表中加入数据
销售人员表
'职工号','姓名','年龄','地区','邮政编码'
'G01','人员1',25,'北京','100101'
'G02','人员2',45,'北京','100108'
'G03','人员3',30,'天津','200211'
'G04','人员4',42,'天津','200322'
'G05','人员5',50,'南京','123456'
'G06','人员6',38,'上海','300310'
'G07','人员7',28,'上海','300123'
'G08','人员8',55,'上海','300456'
产品号 产品名 生产厂家 价格 生产日期
P02 电冰箱 北京 4800 2002/2/14
P03 计算机 北京 7900 2001/11/1
P04 音响 上海 4000 2001/4/6
P05 空调 上海 3800 2001/10/11
P06 洗衣机 青岛 3100 2001/9/18
P07 笔记本 北京 11230 2001/8/30
P08 微波炉 天津 1980 2002/1/20
销售情况表
职工号 产品号 销售日期 销售数量
G03 P04 2001/11/20 16
G03 P05 2001/11/20 2
G05 P02 2002/5/2 1
G06 P07 2001/12/4 5
G06 P08 2002/4/4 10
G03 P02 2002/6/5 4
G08 P02 2001/12/5 1
三、附加题(可以不做)
(1)在“表中加入数据”的过程,可否采用导入的
方法
,而不是手工输入?(提示:将数据拷贝到Excel或者Txt文件,通过MS
SQL
Server提供的导入功能)
(2)可否把完成的abc数据库进行备份?然后在另外一台数据库服务器上进行还原?(提示:MS
SQL
Server企业管理器提供数据库的备份和还原功能)
### 回答1:
SQL
排序
是指根据某个或某些
字段
的值对查询结果进行
排序
,通常使用ORDER BY语句
实现
。如果需要对查询结果进行二次
排序
,即在第一次
排序
的基础上再次
排序
,可以通过添加多个ORDER BY子句来
实现
。
例如,假设需要对一张员工信息表进行
排序
,首先按照工资从高到低
排序
,然后按照入职时间从早到晚
排序
。可以使用以下
SQL
语句:
SELECT * FROM employee
ORDER BY salary DESC, hire_date ASC;
这里的ORDER BY子句包含了两个
排序
规则,第一个规则是按照salary
字段
的降序
排序
,第二个规则是在第一次
排序
结果的基础上按照hire_date
字段
的升序
排序
。
如果需要对包含空值的
字段
进行
排序
,可以使用NULLS FIRST或NULLS LAST子句来指定空值的位置。例如,如果需要将空值排在最前面,则可以使用以下
SQL
语句:
SELECT * FROM employee
ORDER BY salary DESC NULLS FIRST;
这里的NULLS FIRST子句将空值排在了
排序
结果的最前面。
总而言之,
SQL
排序
可以通过多个ORDER BY子句
实现
二次
排序
,空值的
排序
位置也可以通过NULLS FIRST或NULLS LAST子句来指定。
### 回答2:
当我们需要对一个表中的数据进行
排序
时,我们可以使用
SQL
语句中的 ORDER BY 子句来
实现
。ORDER BY 子句可以按照一个或多个
字段
进行
排序
,同时可以指定升序或降序排列。例如,以下
SQL
语句可以按照学生的分数从高到低进行
排序
。
SELECT * FROM students ORDER BY score DESC;
如果需要按照多个
字段
进行
排序
,可以在 ORDER BY 子句中按照顺序列出多个
字段
,并且每个
字段
可以指定不同的
排序
方式。例如,以下
SQL
语句可以按照学生的年级和分数进行
排序
。
SELECT * FROM students ORDER BY grade ASC, score DESC;
在进行多
字段
排序
时,会按照所有
字段
的
排序
顺序进行
排序
。如果两个学生的年级一样,那么会按照分数从高到低进行
排序
。如果两个学生的年级和分数都一样,那么它们的顺序是不确定的。
如果需要在多
字段
排序
之后,再按照其它
字段
进行
排序
,可以使用子查询和 ORDER BY 子句的嵌套。例如,以下
SQL
语句会先按照学生的年级和分数
排序
,然后按照姓名进行
排序
。
SELECT *
FROM (
SELECT * FROM students ORDER BY grade ASC, score DESC
) AS sorted
ORDER BY name ASC;
注意,在进行子查询嵌套时,需要给子查询一个别名(AS sorted),否则会出现语法错误。
最后,如果表中某些
字段
的值为空,那么它们可能导致
排序
出现问题。默认情况下,使用 ORDER BY 子句
排序
时,空值会被排到最后(如果是升序
排序
),或者排到最前面(如果是降序
排序
)。如果需要在
排序
时将空值放在最前面或最后面,可以使用 NULLS FIRST 或 NULLS LAST 关键字。例如,以下
SQL
语句会将空值排在最前面,然后按照年级和分数进行
排序
。
SELECT * FROM students ORDER BY grade ASC NULLS FIRST, score DESC NULLS FIRST;
综上所述,
SQL
中的
排序
可以
实现
对表中数据的按需
排序
,包括多
字段
排序
和在
排序
之后再进行
排序
。同时,对于空值,也提供了一些特殊的
排序
方式,以便满足不同的
排序
需求。
### 回答3:
SQL
(Structured Query Language),也称为结构化查询语言,是一种被广泛应用于关系
型
数据库管理系统的编程语言。
SQL
中有一个重要的功能就是可以对查询结果进行
排序
操作。在
排序
操作中,有时需要对多个
字段
进行
排序
,也可能会碰到
排序
字段
中出现空值的情况。
首先介绍一下单
字段
排序
。当我们需要对一个
字段
进行
排序
操作时,可以使用`ORDER BY`子句对查询结果进行
排序
。例如,下面的
SQL
语句对一个学生成绩表按照数学成绩从高到低进行
排序
:
SELECT name, math_score FROM student_scores ORDER BY math_score DESC;
在这里,`ORDER BY`指令将查询结果按照`math_score`
字段
的值进行
排序
,并且选择降序排列(DESC,即“降序”)。
在多
字段
排序
中,我们需要对多个
字段
进行
排序
。例如,假设我们的学生成绩表中除了数学成绩外,还有英语成绩和语文成绩,我们需要同时按照三个
字段
进行
排序
。在这种情况下,我们可以使用`ORDER BY`子句后跟多个
排序
条件进行多
字段
排序
:
SELECT name, math_score, english_score, chinese_score FROM student_scores ORDER BY math_score DESC, english_score DESC, chinese_score DESC;
在这里,`ORDER BY`指令首先按照`math_score`从高到低
排序
,然后按照`english_score`进行
排序
,最后按照`chinese_score`进行
排序
。
有时,
排序
字段
中可能会出现空值。默认情况下,My
SQL
会将空值视为最小值。例如,下面的
SQL
语句对一个订单表按照订单金额进行
排序
:
SELECT order_id, order_amount FROM orders ORDER BY order_amount DESC;
如果订单表中存在某些订单金额为NULL的订单,则这些订单将会被排在最前面,而不是按照实际的金额大小进行
排序
。为了避免这种情况,我们可以使用`NULLS LAST`或者`NULLS FIRST`指令来改变空值在
排序
结果中的位置。例如,使用`NULLS LAST`指令可以将空值排在所有有值的数据之后:
SELECT order_id, order_amount FROM orders ORDER BY order_amount DESC NULLS LAST;
在这里,`NULLS LAST`指令将空值在
排序
结果中排在所有有值的订单之后。
综上所述,
SQL
中的
排序
功能可以非常方便地对查询结果进行
排序
操作,在多
字段
排序
和空值处理方面也提供了丰富的指令,可以帮助我们更好地处理数据。