我的查询的一部分如下所示:
...
FULL JOIN [tbl_ad] as ad
ON [name] = ad.[firstName] + '', '' + ad.[lastName]
...
[name]总是这样(虚构的名字):
Brian, Vines
Michael, Bartels
Timothy, Gilcrease
组合广告。[firstName] +'',''+ ad。[lastName]将返回相同的内容:
Brian, Vines
Michael, Bartels
Timothy, Gilcrease
所以现在我有一个包含300个用户的列表,其中有一个用户会导致问题,因为它没有返回相同的值,因为他在两个表中都没有相同的名称。
作为[姓名],她有
"Chloe, Jones"
但ad。[firstName] +'',''+ ad。[lastName]的组合是
"Chloë, Jones"
你看:e<> ë
这就是为什么我想在我的查询中使用if,只是为了这个例外...任何想法?
我想到这样的事情:
...
FULL JOIN [tbl_ad] as ad
ON [name] = if [name] == 'Chloe, Jones'
'Chloë, Jones'
else
ad.[firstName] + '', '' + ad.[lastName]
...
或者这是不可能的?
答案 0 :(得分:1)
您可以将两个比较表达式的排序规则更改为重音不敏感,这样不仅Chloe /Chloë,而且任何其他类似的情况都适合您。
为此,您只需在所选列名称后面添加COLLATE
规范。 See COLLATE docs。例如:
ON [name] COLLATE Latin1_General_100_CI_AI
= ad.[firstName] + '' , '' + ad.[lastName] COLLATE Latin1_General_100_CI_AI
注意:此示例不区分大小写,不区分重音
如果你想使用“IF”方式,你只需要添加一个OR
表达式来检查两个组合字段是否都像你喜欢的那样:
ON [name] = ad.[firstName] + '', '' + ad.[lastName]
OR ([name] = 'Chloe, Jones'
AND ad.[firstName] + '', '' + ad.[lastName] = 'Chloë, Jones')
答案 1 :(得分:0)
您可以尝试CASE(许多RDBMS支持)
ON CASE WHEN [name] = 'Chloe, Jones' THEN 'Chloë, Jones' ELSE [name] END
= ad.[firstName] + ', ' + ad.[lastName]