Подтвердить что ты не робот

SELECT $(знак доллара)

У меня есть хороший опыт работы в SQL Server, Но неожиданно я обнаружил эту странную команду SELECT

SELECT $ 

или

SELECT $ FROM tableName

Все время возвращается нулевое скалярное значение (0.00), или новый столбец со всеми значениями 0.00

Что это?

4b9b3361

Ответ 1

Когда SQL Server встречает ваш знак $, он автоматически преобразует его в тип данных money. Поскольку у вас нет явного значения после знака доллара, SQL Server принимает значение 0.00. Из MSDN:

При конвертации в money или smallmoney money целые числа считаются денежными единицами. Например, целочисленное значение 4 преобразуется в денежный эквивалент 4 долларов (для us_english - язык по умолчанию). Числа справа от десятичного числа в значениях с плавающей запятой округляются до четырех знаков после запятой для денежных значений. Выражения типов данных char или varchar, которые преобразуются в целочисленный тип данных, должны состоять только из цифр и необязательного знака плюс или минус (+ или -). Ведущие пробелы игнорируются. Выражения типов данных char или varchar, преобразованные в деньги, могут также включать необязательную десятичную точку и ведущий знак доллара ($).

Ответ 2

После небольшого перебора я понял, что это происходит независимо от того, какой символ валюты используется, SQL-сервер подразумевает, что это поле является полем валюты.

Если вы добавите цифры после символа валюты, в этом случае доллар так:

SELECT $4

SQL-сервер вернет 4.00

Таким образом, SQL Server использует $ и предполагает, что мы хотим создать поле с типом данных MONEY, и поскольку мы не ввели значение после символа валюты, SQL Server предполагает, что значение равно 0, хотя, по моему мнению, это должно вернуть ЗНАЧЕНИЕ NULL.

Ответ 3

Вы можете доказать, что SQL Server рассматривает его как тип money:

select $ as n into #x

exec tempdb..sp_help '#x'

sp_help выведет (среди прочего):

 Column_name     Type     Computed     Length     Prec     Scale     Nullable     TrimTrailingBlanks     FixedLenNullInSource     Collation    
 --------------  -------  -----------  ---------  -------  --------  -----------  ---------------------  -----------------------  ------------ 
 n               money    no           8          19       4         no           (n/a)                  (n/a)                    (null)