SQL服务器中包含普通数字和上标数字的符号比较
Comparison of symbols containing normal numbers and superscript numbers in SQL Server
我只是 运行 在 SQL 服务器上遇到一些问题,同时比较在标准字符旁边包含上标字符的列。只要我比较 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 服务器将两个值视为不同的值?
最好的,斯特凡
使用二进制整理
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;
我只是 运行 在 SQL 服务器上遇到一些问题,同时比较在标准字符旁边包含上标字符的列。只要我比较 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 服务器将两个值视为不同的值?
最好的,斯特凡
使用二进制整理
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;