sql语句中如何识别字符串中的中文逗号的问题

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


declare @adName nvarchar(4000),@adNamestr nvarchar(4000)

set @adNamestr='e租宝,爱国旋律,生生不息,北京华医皮肤'
set @adName=''''+REPLACE(REPLACE(@adNamestr,'''',''''''),',',''',''')+''''

select @adName

结果是:

'e租宝','爱国旋律','生生不息','北京华医皮肤'

它把标题“爱国旋律,生生不息”中的中文逗号也当成英文逗号进行了处理。
而我想要的是只对英文逗号进行处理,预期结果如下:

'e租宝','爱国旋律,生生不息','北京华医皮肤'

这样才能保证后面查询时 Name in ( ' + @adName + ' ) 时查询到正确的结果。
查了网上的一些资料没有找到合适的解决办法,求指点
...全文
823 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:

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 行受影响)


解决了,非常感谢版主指导,非常感谢 修改如下:
set @adName=''''+REPLACE(REPLACE(@adNamestr,'''',''''''),',',''',''')+''''
修改为
set @adName=''''+REPLACE(@adNamestr collate CHINESE_PRC_CI_AS_WS, ',',''',''')+''''
希望给看到帖子的朋友一些帮助。最后再次感谢 版主
卖水果的net 2015-09-11
  • 打赏
  • 举报
回复
引用 3 楼 fengsuiyingdong 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:]

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 行受影响)


我查了下  collate CHINESE_PRC_CI_AS_WS collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影 Chinese_PRC_指针对大陆简体字UNICODE的排序规则 _CI 不区分大小写 _AS 区分重音    // _WS 区分宽度 //如果想让比较将半角字符和全角字符视为不等,请选择该选项 是_WS主要起到区分中英文逗号的作用,使得替换时不再对中文逗号进行处理了!理解正确吧?谢谢[/quote] 对的,就是这个意思。
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:

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 行受影响)


我查了下  collate CHINESE_PRC_CI_AS_WS collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影 Chinese_PRC_指针对大陆简体字UNICODE的排序规则 _CI 不区分大小写 _AS 区分重音    // _WS 区分宽度 //如果想让比较将半角字符和全角字符视为不等,请选择该选项 是_WS主要起到区分中英文逗号的作用,使得替换时不再对中文逗号进行处理了!理解正确吧?谢谢
卖水果的net 2015-09-10
  • 打赏
  • 举报
回复

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 行受影响)


27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧