當前位置:首頁 » 編程語言 » 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