日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server数据库查询区分大小写、全半角——排序规则的应用(转载)

發(fā)布時(shí)間:2024/4/17 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server数据库查询区分大小写、全半角——排序规则的应用(转载) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQL Server數(shù)據(jù)庫(kù)查詢區(qū)分大小寫、全半角——排序規(guī)則的應(yīng)用

因?yàn)榕既坏脑?#xff0c;需要在INNER JOIN聯(lián)表時(shí),讓對(duì)應(yīng)字段進(jìn)行區(qū)分大小寫的比較。而默認(rèn)情況下建立的Sql Server數(shù)據(jù)庫(kù)是不區(qū)分大小寫的,這個(gè)需求怎么實(shí)現(xiàn)呢?

要實(shí)現(xiàn)這個(gè)需求,至少有三個(gè)操作級(jí)別來實(shí)現(xiàn):

1.?數(shù)據(jù)庫(kù)級(jí)別:整個(gè)數(shù)據(jù)庫(kù)中的charvarchartextncharnvarchar?和?ntext?數(shù)據(jù)都區(qū)分大小寫。(為描述方便,下文不再明確強(qiáng)調(diào)這些數(shù)據(jù)類型。)但這樣做有個(gè)明顯的壞處,那就是整個(gè)數(shù)據(jù)庫(kù)的這些字段的比較,都要進(jìn)行嚴(yán)格匹配。比如下面的兩條Sql語句會(huì)得到完全不同的兩種結(jié)果:

SELECT * FROM [TABLE] WHERE [COLUMN] LIKE ‘%KeyWord%’ SELECT * FROM [TABLE] WHERE [COLUMN] LIKE ‘%keyword%’

因?yàn)閿?shù)據(jù)庫(kù)在比較時(shí)會(huì)嚴(yán)格按照大小寫來區(qū)別,這樣就會(huì)導(dǎo)致我們?cè)诔绦蜷_發(fā)過程中難以滿足十分復(fù)雜的查詢需求,特別突出的例子便是關(guān)鍵字搜索——我們無法預(yù)知客戶輸入內(nèi)容的大小寫,我們更不能要求客戶輸入的關(guān)鍵字區(qū)分大小寫。

2.?表字段級(jí)別:只對(duì)特定的表字段進(jìn)行大小寫區(qū)分。這樣做在整體上減小了大小寫限定的范圍,從全數(shù)據(jù)庫(kù)減小到當(dāng)前指定的字段。但使用起來仍然有些局限性。

3.?查詢級(jí)別:只對(duì)本次查詢限定大小寫區(qū)分。這也是本文重點(diǎn)介紹的實(shí)現(xiàn)方式。這樣操作可以讓我們不對(duì)以前的數(shù)據(jù)庫(kù)做任何的修改,只對(duì)當(dāng)前這次查詢區(qū)分大小寫,也不會(huì)影響程序中別處對(duì)這些字段的查詢。

好了,上文說了三個(gè)實(shí)現(xiàn)級(jí)別,那具體怎么實(shí)現(xiàn)呢?這就要用到SQL數(shù)據(jù)庫(kù)中的“排序規(guī)則”了。我們可以在數(shù)據(jù)庫(kù)的屬性上,設(shè)置排序規(guī)則,也可以在表設(shè)計(jì)的字段屬性里設(shè)置排序規(guī)則。具體要設(shè)置什么樣的排序規(guī)則,后面來說,我們先說查詢級(jí)別的排序規(guī)則。下面有一段SQL片段可以演示在查詢級(jí)別區(qū)分大小寫的排序規(guī)則應(yīng)用:

use tempdb set nocount on --1-- print '建立初始數(shù)據(jù)表Customer' create table Customer(id int,uname varchar(10)) insert into Customer select 1,'Jim' union all select 2,'Simith' union all select 3,'uonun'select * from Customer--2-- print '建立初始數(shù)據(jù)表Info' create table Info(uname varchar(10),phone varchar(11)) insert into Info select 'JIM','13800000000' union all select 'Simith','13911111111' union all select 'uonun','13812345678'select * from Info--3-- print '不區(qū)分大小寫,不區(qū)分全半角' select c.id,c.uname as 'c.uname',i.uname as 'i.uname',i.phone from Customer as c inner join Info as i on c.uname = i.uname--4-- print '區(qū)分大小寫,不區(qū)分全半角' select c.id,c.uname as 'c.uname',i.uname as 'i.uname',i.phone from Customer as c inner join Info as i on c.uname = i.uname collate Chinese_PRC_CS_AS--5-- print '不區(qū)分大小寫,區(qū)分全半角' select c.id,c.uname as 'c.uname',i.uname as 'i.uname',i.phone from Customer as c inner join Info as i on c.uname = i.uname collate Chinese_PRC_CI_AI_WS--6-- print '區(qū)分大小寫,區(qū)分全半角' select c.id,c.uname as 'c.uname',i.uname as 'i.uname',i.phone from Customer as c inner join Info as i on c.uname = i.uname collate Chinese_PRC_CS_AI_WSDROP TABLE Customer DROP TABLE Info/* 建立初始數(shù)據(jù)表Customer id uname ----------- ---------- 1 Jim 2 Simith 3 uonun建立初始數(shù)據(jù)表Info uname phone ---------- ----------- JIM 13800000000 Simith 13911111111 uonun 13812345678不區(qū)分大小寫,不區(qū)分全半角 id c.uname i.uname phone ----------- ---------- ---------- ----------- 1 Jim JIM 13800000000 2 Simith Simith 13911111111 3 uonun uonun 13812345678區(qū)分大小寫,不區(qū)分全半角 id c.uname i.uname phone ----------- ---------- ---------- ----------- 2 Simith Simith 13911111111 3 uonun uonun 13812345678不區(qū)分大小寫,區(qū)分全半角 id c.uname i.uname phone ----------- ---------- ---------- ----------- 1 Jim JIM 13800000000 3 uonun uonun 13812345678區(qū)分大小寫,區(qū)分全半角 id c.uname i.uname phone ----------- ---------- ---------- ----------- 3 uonun uonun 13812345678 */

通過上面的SQL語句可以看出,我們?cè)诓樵儠r(shí)使用COLLATE字句,指定排序規(guī)則可以影響查詢結(jié)果。通過上面的圖也可以看出,這個(gè)排序規(guī)則除可以區(qū)分大小寫之外,還可以區(qū)分重音、假名、全半角。

結(jié)束語:

  • 本文沒有更深入研究排序規(guī)則的其他應(yīng)用,比如對(duì)Order by的影響。
  • 本文沒有更深入研究在查詢時(shí)對(duì)多個(gè)不同字段的影響機(jī)制。
  • 示例代碼另見CorePlex代碼庫(kù):?http://udnz.com/Code-409.htm
  • ?

    原文地址:http://blog.udnz.com/Article/use-COLLATE-in-Transact-SQL.aspx

    轉(zhuǎn)載于:https://www.cnblogs.com/RoseDavid/archive/2012/10/19/2730635.html

    總結(jié)

    以上是生活随笔為你收集整理的SQL Server数据库查询区分大小写、全半角——排序规则的应用(转载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。