В качестве альтернативы, если вам нужно использовать nvarchar
, тогда вы можете использовать другое сопоставление.Однако вы можете изменить параметры сортировки столбца в таблице, что может привести к нежелательным последствиям, так как в этом случае любое сравнение, которое вы делаете, должно быть явно сопоставлено, если они не совпадают;что повлияет на SARGability.Учитывая, что вы хотите это только для заказа, вы можете просто использовать ключевое слово COLLATE
.Например:
SELECT ROW_NUMBER() OVER (ORDER BY URL COLLATE SQL_Latin1_General_CP1_CI_AS),
ROW_NUMBER() OVER (ORDER BY CONVERT(nvarchar(20),URL) COLLATE SQL_Latin1_General_CP1_CI_AS),
ROW_NUMBER() OVER (ORDER BY URL COLLATE Latin1_General_CI_AS),
ROW_NUMBER() OVER (ORDER BY CONVERT(nvarchar(20),URL) COLLATE Latin1_General_CI_AS),
ROW_NUMBER() OVER (ORDER BY URL COLLATE Latin1_General_100_BIN2),
ROW_NUMBER() OVER (ORDER BY CONVERT(nvarchar(20),URL) COLLATE Latin1_General_100_BIN2),
URL
FROM (VALUES('http://10.10.14'),
('http://192.168.'),
('https://m.hanno'),
('https://online.'),
('https://online-'),
('https://owi-000'),
('https://owi2.su'),
('https://owi2-00'),
('https://owi2-71'),
('https://owi-700'),
('https://owi-702'),
('https://owi-703'),
('https://owi-704'),
('https://owi-707'),
('https://owi-708'),
('https://owi-710'),
('https://owi-711'),
('https://owi-712'),
('https://owi-713'),
('https://owi-714'),
('https://owi-715'),
('https://owi-716'),
('https://owi-717'),
('https://owigo.n'),
('https://owigosm'),
('https://owigow.'))V(URL)
ORDER BY URL COLLATE Latin1_General_CI_AS;
db <> fiddle
Здесь вы можете видеть, что порядок сортировки SQL_Latin1_General_CP1_CI_AS
имеет другой порядок для varchar
- nvarchar
,С другой стороны, Latin1_General_CI_AS
согласован для обоих (копирование порядка, который nvarchar
с сопоставлением SQL_Latin1_General_CP1_CI_AS
имел).Latin1_General_100_BIN2
также согласуется, но следует тому же порядку для varchar
.