--1. 为数据库指定排序规则
CREATE DATABASE db COLLATE Chinese_PRC_CI_AS
GO

ALTER DATABASE db COLLATE Chinese_PRC_BIN
GO


/**//*====================================*/


--2. 为表中的列指定排序规则
CREATE TABLE tb(
col1 varchar(10),
col2 varchar(10) COLLATE Chinese_PRC_CI_AS)
GO

ALTER TABLE tb ADD col3 varchar(10) COLLATE Chinese_PRC_BIN
GO

ALTER TABLE tb ALTER COLUMN col2 varchar(10) COLLATE Chinese_PRC_BIN
GO


/**//*====================================*/


--3. 为字符变量和参数应用排序规则
DECLARE @a varchar(10),@b varchar(10)
SELECT @a='a',@b='A'

--使用排序规则 Chinese_PRC_CI_AS
SELECT CASE WHEN @a COLLATE Chinese_PRC_CI_AS = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a=@b

--使用排序规则 Chinese_PRC_BIN
SELECT CASE WHEN @a COLLATE Chinese_PRC_BIN = @b THEN '@a=@b' ELSE '@a<>@b' END
--结果:@a<>@b

--1. 按拼音排序
DECLARE @t TABLE(col varchar(2))
INSERT @t SELECT '中'
UNION ALL SELECT '国'
UNION ALL SELECT '人'

SELECT * FROM @t ORDER BY col COLLATE Chinese_PRC_CS_AS_KS_WS
/**//*--结果
col  
---- 



--*/
GO


/**//*==========================================*/


--2. 汉字首字母查询处理用户定义函数
CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
    DECLARE @py TABLE(
        ch char(1),
        hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
        hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
    INSERT @py SELECT 'A',N'吖',N'鏊'
    UNION  ALL SELECT 'B',N'八',N'簿'
    UNION  ALL SELECT 'C',N'嚓',N'错'
    UNION  ALL SELECT 'D',N'哒',N'跺'
    UNION  ALL SELECT 'E',N'屙',N'贰'
    UNION  ALL SELECT 'F',N'发',N'馥'
    UNION  ALL SELECT 'G',N'旮',N'过'
    UNION  ALL SELECT 'H',N'铪',N'蠖'
    UNION  ALL SELECT 'J',N'丌',N'竣'
    UNION  ALL SELECT 'K',N'咔',N'廓'
    UNION  ALL SELECT 'L',N'垃',N'雒'
    UNION  ALL SELECT 'M',N'妈',N'穆'
    UNION  ALL SELECT 'N',N'拿',N'糯'
    UNION  ALL SELECT 'O',N'噢',N'沤'
    UNION  ALL SELECT 'P',N'趴',N'曝'
    UNION  ALL SELECT 'Q',N'七',N'群'
    UNION  ALL SELECT 'R',N'蚺',N'箬'
    UNION  ALL SELECT 'S',N'仨',N'锁'
    UNION  ALL SELECT 'T',N'他',N'箨'
    UNION  ALL SELECT 'W',N'哇',N'鋈'
    UNION  ALL SELECT 'X',N'夕',N'蕈'
    UNION  ALL SELECT 'Y',N'丫',N'蕴'
    UNION  ALL SELECT 'Z',N'匝',N'做'
    DECLARE @i int
    SET @i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
    WHILE @i>0
        SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
            ,@i=PATINDEX('%[吖-做]%' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
        FROM @py
        WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
    RETURN(@str)
END
GO
--1.查询区分全角与半角字符
--测试数据
DECLARE @t TABLE(col varchar(10))
INSERT @t SELECT 'aa'
UNION ALL SELECT 'Aa'
UNION ALL SELECT 'AA'      --全角A
UNION ALL SELECT 'A,A'        --全角A,半角逗号(,)
UNION ALL SELECT 'A,A'    --全角A,全角逗号(,)

--1.查大写字母
SELECT * FROM @t
WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'

--2.查全角字母
SELECT * FROM @t
WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%A%'

--3.查半角逗号(,)
SELECT * FROM @t
WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'

--3.查全角逗号(,)
SELECT * FROM @t
WHERE col COLLATE Chinese_PRC_CS_AS_WS like '%,%'
GO


/**//*=============================================*/


--2 实现全角与半角字符转换的处理函数
CREATE FUNCTION f_Convert(
@str NVARCHAR(4000), --要转换的字符串
@flag bit              --转换标志,0转换成半角,1转换成全角
)RETURNS nvarchar(4000)
AS
BEGIN
    DECLARE @pat nvarchar(8),@step int,@i int,@spc int
    IF @flag=0
        SELECT @pat=N'%[!-~]%',@step=-65248,
            @str=REPLACE(@str,N' ',N' ')
    ELSE
        SELECT @pat=N'%[!-~]%',@step=65248,
            @str=REPLACE(@str,N' ',N' ')
    SET @i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
    WHILE @i>0
        SELECT @str=REPLACE(@str,
                SUBSTRING(@str,@i,1),
                NCHAR(UNICODE(SUBSTRING(@str,@i,1))+@step))
            ,@i=PATINDEX(@pat COLLATE LATIN1_GENERAL_BIN,@str)
    RETURN(@str)
END
GO

转载于:https://www.cnblogs.com/nosnowwolf/archive/2008/04/02/1134550.html

Sql Server 中汉字处理排序规则,全角半角相关推荐

  1. sql server中字符集和排序规则到底什么关系

    --SQLSERVER 中的排序规则 服务器>数据库>表列 --------------------------------- 排序规则简介 ----------------------- ...

  2. 使用pinyin4j获取汉字的拼音和全角半角转换

    前段时间sprint分配了一项任务,查询一个bug,页面搜索汉字加上拼音的时候,无法匹配.最开始的时候以为拼音函数有问题,所以估了一下点就开始着手这件事情. 拼音工具类如下: /** * 获取汉字串拼 ...

  3. SQL SERVER 大小写敏感设置及排序规则详解

    最近操作数据库查询时,提示对象名无效,发现是因为数据库大小写敏感导致,可以通过排序规则设置如下: 排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集.      如:Chinese_PRC ...

  4. SQL Server中的批处理排序和嵌套循环

    Continuing my blog post series after 24HOP Russia "Query Processor Internals – Joins". In ...

  5. Sql Server 中 Order by排序(升序,降序)

    --AddTime 升序,ID 升序 select * from DS_Finance ORDER BY AddTime,ID; --AddTime 升序,ID降序 select * from DS_ ...

  6. java 判断全角_Java如何判断字符串中包含有全角,半角符号

    首先介绍下全角跟半角之间的区别: 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角" ...

  7. Java如何判断字符串中包含有全角,半角符号

    一.全角跟半角之间的区别 在计算机屏幕上,一个汉字要占两个英文字符的位置,人们把一个英文字符所占的位置称为"半角",相对地把一个汉字所占的位置称为"全角".在汉 ...

  8. Java如何判断字符串中包含有全角,半角符号,以及去除中文

    全角:是指中GB2312-80(<信息交换用汉字编码字符集·基本集>)中的各种符号. 半角:是指英文件ASCII码中的各种符号. 全角状态下字母.数字符号等都会占两个字节的位置,也就是一个 ...

  9. 我的Android进阶之旅------gt;Java全角半角的转换方法

    一中文全角和半角输入的区别 1全角指一个字符占用两个标准字符位置 2半角指一字符占用一个标准的字符位置 3全角与半角各在什么情况下使用 4全角和半角的区别 5关于全角和半角 6全角与半角比较 二转半角 ...

最新文章

  1. Docker container与宿主进程相互隔离的实现原理
  2. P4248-[AHOI2013]差异【SAM or SA】
  3. Matlab如何求离散点的导数
  4. redis源码剖析(十四)—— dump.rdb文件分析工具
  5. 会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...
  6. docker springboot读取配置文件_Docker从入门到掉坑(三):容器太多,操作好麻烦
  7. java 中计算时间差
  8. 【面经】腾讯NLP实习面经(Offer已拿)
  9. CF1062D Fun with Integers
  10. python求解比一个给定的数字大的最小对称数
  11. 三维空间中的Pitch、Yaw、Roll值
  12. linux ftp服务器登录异常解决
  13. 极速PDF打开文件后工具栏不显示怎么办
  14. Java如何使用JDOM解析XML呢?
  15. VUE项目配置SSR
  16. 列举几个:MAC OS科研软件推荐
  17. 奇虎360历届笔试面试题汇总
  18. 数据采集---高清壁纸
  19. 回顾日本和台湾的股市泡沫
  20. SQL,什么时候用自身连接????

热门文章

  1. node --- 一个很好用的包json-server
  2. c++单链表【构造函数、运算符重载、析构函数、增删查改等】
  3. Windows XP中快速识别真假SVCHOST.EXE
  4. ubuntu上网慢的问题
  5. ISP 图像传感器camera原理
  6. 基于ARM9的视频采集传输系统
  7. Verdi 基础教程
  8. 【深度学习】——纠错error: Unable to find vcvarsall.bat:关于安装pycocotools
  9. 现代制造工程课堂笔记03:第二部分(含易考点与必考点)
  10. android studio 手动安装gradle,Android Studio 如何安装Gradle?