当前位置:首页 » 编程语言 » sql按笔画排序
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql按笔画排序

发布时间: 2022-08-11 23:36:49

sql 中的排序规则什么意思

什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server 中,
字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存
储和比较字符所使用的规则。"
在查询分析器内执行下面语句,可以得到SQLSERVER支持的所有排序规则。
select * from ::fn_helpcollations()
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。
如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则,按拼音排序。
Chinese_PRC_Stroke 表示按汉字笔画排序;
排序规则的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分(case-insensitive/case-sensitive)
_AI(AS) 是否区分重音,AI不区分,AS区分(accent-insensitive/accent-sensitive)
_KI(KS) 是否区分假名类型,KI不区分,KS区分(kanatype-insensitive/kanatype-sensitive)
_WI(WS) 是否区分宽度 WI不区分,WS区分(width-insensitive/width-sensitive)
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。

⑵ SqlServer中如何按姓氏笔画排序

Select*
FromTableName
_PRC_Stroke_ci_as

⑶ SQL查询except all,怎样显示所有字段

1.按姓氏笔画排序:
Select * From TableName order By CustomerName Collate Chinese_PRC_Stroke_ci_as

2.分页SQL语句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 结束位置

3.获取当前数据库中的所有用户表
select * from sysobjects where xtype='U' and category=0

4.获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')

5.查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

6.查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'

7.查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

8.查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'

9.使用事务
在使用一些对数据库表的临时的SQL语句操作时,可以采用SQL SERVER事务处理,防止对数据操作后发现误操作问题
开始事务
Begin tran
Insert Into TableName Values(…)
SQL语句操作不正常,则回滚事务。
回滚事务
Rollback tran
SQL语句操作正常,则提交事务,数据提交至数据库。
提交事务
Commit tran
10. 按全文匹配方式查询
字段名 LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%'
or 字段名 LIKE N'%[^a-zA-Z0-9]China'
or 字段名 LIKE N'China[^a-zA-Z0-9]%'
or 字段名 中网互赢 手机客户端 LIKE N'China

⑷ sql语句中的order by排序问题 数据库中有一priority字段,取值为高、中、低。

这个无法出现正常的排序。在SQL中对于字符或是汉字的排序依据是汉字字母按英文排序的方式。也就是说如果在没有更改的情况下,select * from table order by priority [ASC]顺序应该是低(D),高(G),中(Z)的顺序进行排列的。而若是select * from table order by priority DESC(降序)时与ASC正好相反。高中低的顺序是我们理解的,而不是计算机所能理解的,所有字符对于计算机来说都是没有意义的,所以在不更改的前提下是没有办法让计算机理解高中低的含义并让他排序的。

但数据库一般的排序有三种手段,第一种就是默认,已经介绍过了,另两种是笔画排序和ASC码序(机器码序)笔划排序对于汉字来说还可以确认,但是对于机器码序有很大的不可预知性,我们不可能也记不信每一个汉字的机器码的,所以如果你能恰好得出低中高的顺序,那么现在不是前两种顺序就有可能是后一种顺序,只要使用DESC就可以降序排列了!

⑸ 请教!请问在SQL中 汉字字符是如何排序的

对于 SQL Server

-- 按照拼音来排序
1> SELECT
2> *
3> FROM
4> Tab
5> ORDER BY
6> val COLLATE Chinese_PRC_CS_AS_KS_WS
7> go
id val
----------- ----------
2 二
3 三
4 四
5 五
1 一

(5 行受影响)

-- 按照笔画数的多少来排序
1> SELECT
2> *
3> FROM
4> Tab
5> ORDER BY
6> val COLLATE Chinese_PRC_Stroke_CS_AS_KS_WS
7> go
id val
----------- ----------
1 一
2 二
3 三
5 五
4 四
(5 行受影响)

⑹ oracle中 sql语句怎么按姓氏的笔画来排序,用 Collate Chinese_PRC_Stroke_ci_as 会报sql语句未正确结束

select * from xxxx order by nlssort(xxxxx,'NLS_SORT=SCHINESE_STROKE_M');

这样查不行吗? 建议可添加拼音码/五笔码字段,存储过程预处理一次,之后每次程序提交都自动由JAVA生成下。加快查询速度。或便于AJAX查询。

⑺ SQL查询的问题

原因: 排序方式不一样。
其中一个表的某一列 ,排序方式是 Latin1_General_CI_AS
另外一个表的某一列, 排序方式是 Chinese_Taiwan_Stroke_CI_AS

由于排序方式不一致的话,两表关联的时候,会存在问题。
解决办法,统一排序方式。
也就是修改某个表的排序方式,与另外一个表的排序方式一致。

修改的例子SQL 语句如下:

恢复 tab 表的 val 字段,不区分大小写
ALTER TABLE tab
ALTER COLUMN val NVARCHAR(10) COLLATE Chinese_PRC_CI_AS

对你来说,就是
ALTER TABLE 那个排序方式为Latin1的表
ALTER COLUMN 字段 数据类型 Chinese_Taiwan_Stroke_CI_AS

这样,就把2表的2个关联的字段的排序方式统一为 Chinese_Taiwan_Stroke_CI_AS
注: Chinese_Taiwan_Stroke_CI_AS 排序方式,好像是按照繁体中文的汉字笔画进行排序的。

⑻ mysql中怎么按姓氏笔画排序

项目中有时候需要按照汉字的拼音排序,比如联系人列表、矿物分类等,有的还需要按拼音字母从A到Z分类显示。

如果存储汉字的字段编码使用的是GBK字符集,因为GBK内码编码时本身就采用了拼音排序的方法(常用一级汉字3755个采用拼音排序,二级汉字就不是了,但考虑到人名等都是常用汉字,因此只是针对一级汉字能正确排序也够用了),直接在查询语句后面添加ORDER BYname ASC,查询结果将按照姓氏的升序排序;如果存储姓名的字段采用的是utf8字符集,需要在排序的时候对字段进行转码,对应的代码是ORDER BY convert(name using gbk) ASC,同样,查询的结果也是按照姓氏的升序排序。

按拼音首字母分类显示的时候,需要借助一个中间表,存储的是字母对应的汉字的编码范围,这样的话,每次取出汉字然后跟中间表比对就可以了,中间表创建和插入数据的SQL如下:

/*
NavicatMySQLDataTransfer
TargetServerType:MYSQL
TargetServerVersion:50617
FileEncoding:65001
Date:2015-07-0211:12:15
*/
SETFOREIGN_KEY_CHECKS=0;
------------------------------
--Tablestructurefort_coslers
------------------------------
DROPTABLEIFEXISTS`t_coslers`;
CREATETABLE`t_coslers`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`f_PY`char(1)CHARACTERSETutf8DEFAULTNULL,
`cBegin`smallint(5)unsignedNOTNULL,
`cEnd`smallint(5)unsignedNOTNULL,
PRIMARYKEY(`id`)
)ENGINE=InnoDBAUTO_INCREMENT=24DEFAULTCHARSET=latin1;
------------------------------
--Recordsoft_coslers
------------------------------
INSERTINTO`t_coslers`VALUES('1','A','45217','45252');
INSERTINTO`t_coslers`VALUES('2','B','45253','45760');
INSERTINTO`t_coslers`VALUES('3','C','45761','46317');
INSERTINTO`t_coslers`VALUES('4','D','46318','46825');
INSERTINTO`t_coslers`VALUES('5','E','46826','47009');
INSERTINTO`t_coslers`VALUES('6','F','47010','47296');
INSERTINTO`t_coslers`VALUES('7','G','47297','47613');
INSERTINTO`t_coslers`VALUES('8','H','47614','48118');
INSERTINTO`t_coslers`VALUES('9','J','48119','49061');
INSERTINTO`t_coslers`VALUES('10','K','49062','49323');
INSERTINTO`t_coslers`VALUES('11','L','49324','49895');
INSERTINTO`t_coslers`VALUES('12','M','49896','50370');
INSERTINTO`t_coslers`VALUES('13','N','50371','50613');
INSERTINTO`t_coslers`VALUES('14','O','50614','50621');
INSERTINTO`t_coslers`VALUES('15','P','50622','50905');
INSERTINTO`t_coslers`VALUES('16','Q','50906','51386');
INSERTINTO`t_coslers`VALUES('17','R','51387','51445');
INSERTINTO`t_coslers`VALUES('18','S','51446','52217');
INSERTINTO`t_coslers`VALUES('19','T','52218','52697');
INSERTINTO`t_coslers`VALUES('20','W','52698','52979');
INSERTINTO`t_coslers`VALUES('21','X','52980','53640');
INSERTINTO`t_coslers`VALUES('22','Y','53689','54480');
INSERTINTO`t_coslers`VALUES('23','Z','54481','55289');

借助中间表查询汉字首字母的示例SQL如下(utf8字符集):

SELECTt1.id,t1.name,t2.f_PY
FROMt_usert1,t_coslerst2
WHERECONV(HEX(LEFT(CONVERT(t1.nameUSINGgbk),1)),16,10)BETWEENt2.cBeginANDt2.cEnd
ORDERBYconvert(t1.nameusinggbk)ASC

需要注意的一点是,上述的排序、分类方法对多音字的支持并不是很好,要求高精度的同学慎用。

⑼ asp中如何对姓名字段按笔画排序

ACCESS本身没有这个功能,要实现可以自己定义一个字段用来存储笔画数(笔画数得自己数了),然后按这个字段来排序查询

建议改为SQL Server数据库,可以用Jacky/!!!兄的方法,order和collate前面分别要加空格

⑽ sql按姓氏笔画排序的问题

Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as