Sql-Server
刪除 char(185) 時替換刪除 Ones / 1 的函式(上標 1)
好的,正如標題所暗示的那樣。
當
REPLACE
對臨時表中的數據使用 char(185) 上的函式時,也會刪除那些(“1”)。SQL SERVER 2008R2
UNICODE 數據
數據庫排序 - 排序 SQL_Latin1_General_CP1_CS_AS Tempdb 具有預設值
我可以提供的任何其他可能有用的細節,請告訴我。
CHAR(185)
,作為 VARCHAR 數據,使用 8 位程式碼頁,可以是不同的字元,具體取決於所使用的程式碼頁(由使用CHAR()
函式時目前數據庫的排序規則決定)。在許多程式碼頁中,包括常見的 Windows-1252 (Latin1_General),字元是上標 1(即“ 1 ”)。根據所使用的排序規則/程式碼頁,此字元可能具有到正常“1”的“最合適”映射。此外,在使用 Windows 排序規則時,區分大小寫會影響相同字元的下標、上標和正常版本之間的匹配結果(說真的!請參見下面的範例)。這也涵蓋了
NVARCHAR
/Unicode 數據(包括VARCHAR
從 SQL Server 2019 開始的 UTF-8)。當需要匹配特定字元時,您需要使用二進制排序規則(即以
_BIN2
除非在 SQL Server 2005 或更早版本上結束,在這種情況下只有_BIN
排序規則可用)。SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE SQL_Latin1_General_CP1_CI_AS -- no rows (SQL Server collation, code page 1252, case insensitive) SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE SQL_Latin1_General_CP437_CI_AS -- 1 row (SQL Server collation, code page 437, case insensitive) SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE SQL_Latin1_General_CP437_CS_AS -- 1 row (SQL Server collation, code page 437, case sensitive) SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE Latin1_General_100_CI_AS -- 1 row (Windows collation, code page 1252, case insensitive) SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE Latin1_General_100_CS_AS -- no rows (Windows collation, code page 1252, case sensitive) SELECT CHAR(185) WHERE CHAR(185) = '1' COLLATE Latin1_General_100_BIN2; -- no rows (Windows collation, code page 1252, _BIN2 collation; always works!)
如上所述,Unicode 數據(不管排序規則的類型)
VARCHAR
與 Windows 排序規則使用的數據相同(因為兩種情況都使用相同的 Unicode 規則):SELECT NCHAR(185) WHERE NCHAR(185) = N'1' COLLATE Latin1_General_100_CI_AS -- 1 row (Windows collation, Unicode data, case insensitive) SELECT NCHAR(185) WHERE NCHAR(185) = N'1' COLLATE Latin1_General_100_CS_AS -- no rows (Windows collation, Unicode data, case sensitive)