Извините за несколько тривиальный вопрос, но почему
select ('https://stackoverflow.com/users/' + str(Id)) as Link
from Users
where DisplayName = 'Jon Skeet';
при вводе в Обозреватель данных возвращает
https://stackoverflow.com/users/ 22656
вместо
https://stackoverflow.com/users/22656
?
Согласно документации Microsoft по оператору T-SQL +
,
'book' + 'case'
должен дать
'bookcase'
not
'book case'
и, согласно документации Data Explorer , SQL-код, используемый в Stack Exchange Data Explorer, действительно является T-SQL.
Некоторые дополнительные эксперименты:
select str(42);
возвращает "42"
, без лишних пробелов (см. РЕДАКТИРОВАТЬ ниже) .
select ('foo' + 'bar');
возвращает "foobar"
, также безпробелы.
select ('foo' + '42');
возвращает "foo42"
, поэтому он не обрабатывает цифры специально или что-то в этом роде.
Мне кажется, что базовый семантический принцип композиционностинарушались.Что мне здесь не хватает?
EDIT Проблема оказалась неверным предположением, что
select str(42);
возвращает "42"
.На самом деле он возвращает
" 42"
, но пробелы игнорируются браузерным графическим интерфейсом.
Вот еще один пример, который более четко демонстрирует проблему:
select 'foo' + str('42');
, кажется, возвращает
"foo 42"
, но на самом деле возвращает
"foo 42"
как можно увидеть в этом запросе:
select LEN('foo' + str('42'));
, который возвращает 13 (не 5, а также не 6).Большое спасибо @ lad2025 за указание на это.
Итак, в основном это была «оптическая иллюзия», вызванная несколько неточным представлением строковых результатов в браузере.