Мы столкнулись с очень странной проблемой (действительно странной для такого зрелого продукта):
Как получить количество символов в строке Unicode с помощью операторов Transact-SQL.
Основная проблема этой проблемы в том, что функция len()
TSQL возвращает количество символов, исключая конечные пробелы. Другой вариант - использовать длину данных (которая возвращает количество байтов) и разделить на 2, чтобы получить числа символов Unicode. Но символы Юникода могут быть суррогатными парами, поэтому они тоже не будут работать.
У нас есть 2 варианта решения: первый - использовать len(replace())
, а второй - добавить один символ, а затем вычесть 1 из результата. Но ИМО оба варианта довольно некрасивые.
declare @txt nvarchar(10)
set @txt = 'stack '
select @txt as variable,
len(@txt) as lenBehaviour,
DATALENGTH(@txt)/2 as datalengthBehaviour,
len(replace(@txt,' ','O')) as ReplaceBehaviour,
len(@txt+'.')-1 as addAndMinusBehaviour
Есть еще идеи, как считать символы в строке с пробелами?