SQL Server中包含正常数字和上标数字的符号比较

时间:2017-09-21 11:03:50

标签: sql unicode collation superscript

我在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

1 个答案:

答案 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;