理解collate Chinese_PRC_CI_AS ,请看实例:sql语句中如何识别字符串中的中文逗号的问题

如题所述,网页上以标题字段进行查找时(如选择了3个标题,各标题间以英文逗号分隔),注意红色部分是一个标题(含有中文逗号)
如:  e租宝, 爱国旋律,生生不息 ,北京华医皮肤
在sql语句中处理时会把每个标题都加上单引号,以便在sql语句中查询。如:

SQL code
?
1
2
3
4
5
6
declare  @adName nvarchar(4000),@adNamestr nvarchar(4000)
 
set  @adNamestr= 'e租宝,爱国旋律,生生不息,北京华医皮肤'
set  @adName= '' '' + REPLACE ( REPLACE (@adNamestr, '' '' , '' '' '' ), ',' , '' ',' '' )+ '' ''
 
select  @adName

结果是:
SQL code
?
1
'e租宝' , '爱国旋律' , '生生不息' , '北京华医皮肤'

它把标题“爱国旋律,生生不息”中的中文逗号也当成英文逗号进行了处理。
而我想要的是只对英文逗号进行处理,预期结果如下:
SQL code
?
1
'e租宝' , '爱国旋律,生生不息' , '北京华医皮肤'

这样才能保证后面查询时 Name in ( ' + @adName + ' ) 时查询到正确的结果。


***************************************

感谢版主:wmxcn2000的解答:

SQL code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
declare  @adName nvarchar(4000),@adNamestr nvarchar(4000)
declare  @s  varchar (1000)
 
set  @adNamestr= 'e租宝,爱国旋律,生生不息,北京华医皮肤' 
set  @adName= '' '' + REPLACE ( REPLACE (@adNamestr, '' '' , '' '' '' ), ',' , '' ',' '' )+ '' ''
 
set  @s =  REPLACE (@adNamestr  collate  CHINESE_PRC_CI_AS_WS,  ',' , '' ',' ''
 
select  @adName
select  @s
 
 
----------------------------------------------
'e租宝' , '爱国旋律' , '生生不息' , '北京华医皮肤'
 
(1 行受影响)
 
 
----------------------------------------------
e租宝 ',' 爱国旋律,生生不息 ',' 北京华医皮肤
 
(1 行受影响)

解决细节如:

修改如下:

SQL code
?
1
set  @adName= '' '' + REPLACE ( REPLACE (@adNamestr, '' '' , '' '' '' ), ',' , '' ',' '' )+ '' ''

修改为
SQL code
?
1
set  @adName= '' '' + REPLACE (@adNamestr  collate  CHINESE_PRC_CI_AS_WS,  ',' , '' ',' '' )+ '' ''

问题解决。


事后经查询相关资料理解如下:

 collate CHINESE_PRC_CI_AS_WS
collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影
Chinese_PRC_指针对大陆简体字UNICODE的排序规则
_CI 不区分大小写
_AS  区分重音    //
_WS 区分宽度               //如果想让比较将半角字符和全角字符视为不等,请选择该选项
参考:http://blog.163.com/zjlovety@126/blog/static/224186242009929111243267/
是_WS主要起到区分中英文逗号的作用,使得替换时不再对中文逗号进行处理了!


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值