如题所述,网页上以标题字段进行查找时(如选择了3个标题,各标题间以英文逗号分隔),注意红色部分是一个标题(含有中文逗号)
如: e租宝, 爱国旋律,生生不息 ,北京华医皮肤
在sql语句中处理时会把每个标题都加上单引号,以便在sql语句中查询。如:
结果是:
它把标题“爱国旋律,生生不息”中的中文逗号也当成英文逗号进行了处理。
而我想要的是只对英文逗号进行处理,预期结果如下:
修改为
如: e租宝, 爱国旋律,生生不息 ,北京华医皮肤
在sql语句中处理时会把每个标题都加上单引号,以便在sql语句中查询。如:
1
2
3
4
5
6
|
declare
@adName nvarchar(4000),@adNamestr nvarchar(4000)
set
@adNamestr=
'e租宝,爱国旋律,生生不息,北京华医皮肤'
set
@adName=
''
''
+
REPLACE
(
REPLACE
(@adNamestr,
''
''
,
''
''
''
),
','
,
''
','
''
)+
''
''
select
@adName
|
结果是:
1
|
'e租宝'
,
'爱国旋律'
,
'生生不息'
,
'北京华医皮肤'
|
它把标题“爱国旋律,生生不息”中的中文逗号也当成英文逗号进行了处理。
而我想要的是只对英文逗号进行处理,预期结果如下:
1
|
'e租宝'
,
'爱国旋律,生生不息'
,
'北京华医皮肤'
|
这样才能保证后面查询时 Name in ( ' + @adName + ' ) 时查询到正确的结果。
***************************************
感谢版主:wmxcn2000的解答:
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 行受影响)
|
解决细节如:
修改如下:
1
|
set
@adName=
''
''
+
REPLACE
(
REPLACE
(@adNamestr,
''
''
,
''
''
''
),
','
,
''
','
''
)+
''
''
|
修改为
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主要起到区分中英文逗号的作用,使得替换时不再对中文逗号进行处理了!