我在SQL Server上遇到一些问题,同时比较包含标准字符旁边的上标字符的列。只要我比较VARCHAR中的列,它就会按预期工作。在NVARCHAR中,正常数字和上标数字被视为相等,如以下示例代码所示:
CREATE TABLE #uom
(
SYMBOL_N1 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
, SYMBOL_N2 NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
, SYMBOL_V1 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
, SYMBOL_V2 VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS
)
INSERT INTO #uom VALUES ('in²','in2','in²','in2')
SELECT
CASE WHEN SYMBOL_N1 = SYMBOL_N2 THEN 1 ELSE 0 END AS N
, CASE WHEN SYMBOL_V1 = SYMBOL_V2 THEN 1 ELSE 0 END AS V
FROM #uom;
--RESULTS
--N = 1
--V = 0
由于我们在某些情况下也使用国际字符,因此必须使用UNICODE。
任何人都有一个想法,如何让SQL Server将这两个值视为不同?
Best,Stefan
答案 0 :(得分:0)
使用二进制整理
SELECT *,
CASE WHEN SYMBOL_N1 COLLATE LATIN1_GENERAL_BIN = SYMBOL_N2 COLLATE LATIN1_GENERAL_BIN THEN 1 ELSE 0 END AS N
, CASE WHEN SYMBOL_V1 = SYMBOL_V2 THEN 1 ELSE 0 END AS V
FROM #uom;