Sql server 如何检查';AAA和x27;vs';AAa和x27;在TSQL中,使用SQL\u拉丁1\u通用\u CP1\u CI\u作为排序规则

Sql server 如何检查';AAA和x27;vs';AAa和x27;在TSQL中,使用SQL\u拉丁1\u通用\u CP1\u CI\u作为排序规则,sql-server,tsql,collation,Sql Server,Tsql,Collation,我有个问题,我似乎无法摆脱它。 我的数据库具有上面的排序规则设置,SQL拉丁1\u General\u CP1\u CI\u AS,我无法更改,我从另一个数据库导入的一列具有SQL拉丁1\u General\u CP1\u CS\u AS,值为“AAA”和“AAA”。 此外,通过连接此字段,我必须从另一个表(与我的db相同的排序规则,SQL\u Latin1\u General\u CP1\u CI\u as)中检索另一列的值。 我的问题是,由于这种排序,SQL\u Latin1\u Gener

我有个问题,我似乎无法摆脱它。 我的数据库具有上面的排序规则设置,SQL拉丁1\u General\u CP1\u CI\u AS,我无法更改,我从另一个数据库导入的一列具有SQL拉丁1\u General\u CP1\u CS\u AS,值为“AAA”和“AAA”。 此外,通过连接此字段,我必须从另一个表(与我的db相同的排序规则,SQL\u Latin1\u General\u CP1\u CI\u as)中检索另一列的值。 我的问题是,由于这种排序,SQL\u Latin1\u General\u CP1\u CI\u AS,两个值('AAA'和'AAA')被“视”为相同的,我的联接返回'AAA'和'AAA'的值,其中它应该只返回'AAA'的匹配联接。 是否有一种“技巧”可以帮助我只过滤“AAa”?是否要以某种方式模仿SQL拉丁语通用语言CP1 CS作为排序规则? 问候,

乐: 我有两张桌子,表一和表二。表1有column1-ID,column2-currency。表2的第1列为货币,第2列为汇率。表1和表2中的两列都有不敏感的值(例如EUR和EUR)。我只想从表2中检索与确切货币匹配的行的汇率值。我试过了

Select t1.id
, t1.currency
, t2.rate 
from table1 t1 
inner join table2 t2 on t1.currency=t2.currency COLLATE  SQL_Latin1_General_CP1_CS_AS
但是它,;It’s not working as,对于只有欧元的ID,我得到了费率,尽管我应该只有只有只有欧元作为费率的ID

select * 
from t
where col collate SQL_Latin1_General_CP1_CS_AS = 'AAa'
rextester演示:

从此测试设置返回
AAa

create table t (col varchar(32))
insert into t values
('AAA'),('AAa'),('aAa'),('AaA')
对于连接,您可以使用
collate
如下所示:

select * 
from t
  inner join t as t2
    on t.col collate SQL_Latin1_General_CP1_CS_AS  = t2.col;
返回

+-----+-----+
| col | col |
+-----+-----+
| AAA | AAA |
| AAa | AAa |
| aAa | aAa |
| AaA | AaA |
+-----+-----+

通常,SQL Server不区分大小写(就像大多数其他SQL语言一样-MySQL具有启用或禁用区分大小写功能的功能。请参阅->)。因此,如果您使用的是SQL Server,那么数据中可能存在一些其他问题,例如一些无效字符。例如char(9)或char(10)等。但是如果您确定问题是这样的,那么请尝试通过将两个文件的大小写转换为大写或小写来合并值。像下面这样的

SELECT
   *
FROM table1 t1
     INNER JOIN table2 t2
ON UPPER(t1.Colname) = UPPER(t2.Colname)

通常通过内联collate语句执行此操作。您可以在连接、where子句等中执行此操作。我已尝试使用连接collumn COLLATE SQL\u Latin1\u General\u CP1\u CS\u AS,但它似乎不起作用可能与您定义的“它似乎不起作用”重复?在这里共享一些代码会有很大的帮助。目前,我们对问题的描述含糊不清,回答是“它不起作用”。我建议使用一些示例数据(理想情况下是DDL和MCVE),而不是所有的赘言。如果@SqlZim的答案足够,则复制类似于@SqlZim的内容。只有当排序规则是区分大小写的排序规则时,这才有效。在不区分大小写的排序规则“AAA”=“AAA”中。简单地将所有内容强制为大写并不是一个好方法,因为可能所有内容都不都是大写的。谢谢,它起到了作用……我在表t2中添加了一个额外的子句,这就是为什么我觉得join没有这样做的原因work@BogdanM很乐意帮忙!是的-请记住,
collate
仅适用于紧随其后的部分,而不适用于整个比较