Почему этот запрос возвращает денежную стоимость?

Сегодня я написал запрос, который должен возвращать ошибку. Вместо этого он возвращает значение 15 с именем столбца, why и типа данных money. У вас есть идея, почему?

select \15why

Результат:

why
15.00

Ответ 1

Вы указываете константу:

денежные константы представлены в виде строки чисел с необязательной десятичной точкой и необязательным символом валюты в качестве префикса

Таким образом, select €15 получив money константу, и select $15, а также select ¥15.

Там есть особенность, о которой указал Йерен в комментариях:

Поскольку знак йены (¥) является индикатором валюты, а в некоторых наборах нативных японских символов его кодовая точка такая же, как и для обратной косой черты в ASCII.

См. Также MSDN: деньги и smallmoney (Transact-SQL).

Итак, select \15, чтобы быть равным select ¥15.

Что касается имени столбца: select 5a приводит к столбцу с псевдонимом a и значением 5. Поскольку "a" не является числовым суффиксом, он рассматривается как select 5 as a, где "as" является необязательным. Вместо этого select 5e вернет 5 в столбце без имени, потому что "e" - это числовой суффикс.

Таким образом, вы обнаружили другой способ написать select ¥15 as why.