2017-03-13 50 views
2

我遇到了一個問題,我似乎無法解決它。 我的數據庫有上面的排序規則設置,SQL_Latin1_General_CP1_CI_AS,我不能改變,我有一列,我從另一個SQL_Latin1_General_CP1_CS_AS數據庫導入,值'AAA'和'AAa'。 此外,通過加入此字段,我必須從另一個表(與我的db相同的排序規則,SQL_Latin1_General_CP1_CI_AS)檢索另一個列的值。 我的問題是,由於這種排序規則,SQL_Latin1_General_CP1_CI_AS,值('AAA'和'AAa'),「看到」,因爲我的聯接返回值'AAA'和'AAa'它應該返回一個僅匹配'AAa'的匹配連接。 是否有一個「竅門」,可以幫助我只過濾'AAa的?意思是模仿SQL_Latin1_General_CP1_CS_AS排序? Regards,如何使用SQL_Latin1_General_CP1_CI_AS整理檢查TSQL中的'AAA'與'AAa'

LE: 我有兩個表,Table1和Table2。表1具有第1列 - ID,第2列 - 貨幣。表2具有列1列 - 貨幣和列2 - 列。來自table1和table2的兩列都具有不敏感的值(例如EUR和EUr)。我想從table2(速率值)中檢索值,僅適用於與確切貨幣匹配的行。我試過

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 

但它;不是工作的,對於它們已經EUR我有速度的ID,儘管我應該只有這只是其作爲歐元率IDS。

+3

您通常通過內聯collat​​e語句來執行此操作。你可以在一個連接,where子句等https://msdn.microsoft.com/en-us/library/ms184391.aspx –

+0

我試過使用連接列COLLATE SQL_Latin1_General_CP1_CS_AS,但它似乎不工作 – BogdanM

+0

可能[如何獲得SQL Server中的排序規則的區分大小寫的版本?](http://stackoverflow.com/questions/28920584/how-to-get-a-case-sensitive-version-of-acollapse -in-sql-server) – dlatikay

回答

4
select * 
from t 
where col collate SQL_Latin1_General_CP1_CS_AS = 'AAa' 

rextester演示:http://rextester.com/CZAWR50665

回報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 | 
+-----+-----+ 
+0

謝謝,它的工作...我有一個額外的條款添加到表t2,這就是爲什麼我的印象加入不起作用 – BogdanM

+0

@BogdanM快樂的幫助! – SqlZim

+0

是的 - 請記住'collat​​e'僅適用於_immediately preceeding_部分,而不適用於整個比較 –

-1

通常,SQL Server不區分大小寫(就像大多數其他SQL語言一樣 - MySQL具有啓用或禁用區分大小寫功能的功能。參考 - >Is SQL syntax case sensitive?)。因此,如果您使用的是SQL Server,那麼數據中可能存在其他一些問題,例如某些無效字符。如char(9)或char(10)等。但如果您確定問題是這種情況,請不要嘗試通過將兩個文件的大小寫轉換爲大寫或小寫的方式來加入值。類似下面的東西

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

這隻有在排序規則是區分大小寫的排序規則時纔有效。在不區分大小寫的整理「AAA」=「aaa」。而只是強迫所有東西都不是好方法,因爲也許一切都不是大寫。 –

相關問題