Sql server 如何检查';AAA和x27;vs';AAa和x27;在TSQL中,使用SQL\u拉丁1\u通用\u CP1\u CI\u作为排序规则
我有个问题,我似乎无法摆脱它。 我的数据库具有上面的排序规则设置,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中检索与确切货币匹配的行的汇率值。我试过了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
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
仅适用于紧随其后的部分,而不适用于整个比较