T-SQL знак доллара в выражениях
на ответ, есть трюк, который позволяет использовать ROW_NUMBER()
оконная функция с "константой" в ORDER BY
статья:
SELECT ROW_NUMBER() OVER (ORDER BY $/0)
FROM master..spt_values
после некоторого поиска в Google, я не могу найти что означает знак доллара в этом контексте?
Я попытался выполнить простой запрос:
SELECT $;
и он возвращается 0
.
может кто-нибудь объяснить это?
2 ответов
Это просто money
постоянный (то, что T-SQL называет литералами).
вы, вероятно, были бы менее удивлены, если бы увидели выражение .50
, что было бы просто еще одной константой.
другие примеры: select £,¢,¤,¥,€
все возвращают 0s также.
может быть сложно определить, какой тип данных вы смотрите в T-SQL. Один трюк, если вы подозреваемый вы знаете, какой это тип, чтобы выбрать несовместимые тип и попытка преобразования:
select CONVERT(date,$)
результат:
Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type money to date is not allowed.
спасибо @Damien_The_Unbeliever для указания в правильном направлении.
Я просто хотел бы добавить к его ответу результаты запроса, который дает точное описание, Что такое константы с $
вход:
SELECT
$ AS Value,
SQL_VARIANT_PROPERTY ( $ , 'BaseType' ) AS BaseType,
SQL_VARIANT_PROPERTY ( $ , 'Precision' ) AS Precision,
SQL_VARIANT_PROPERTY ( $ , 'Scale' ) AS Scale,
SQL_VARIANT_PROPERTY ( $ , 'TotalBytes' ) AS TotalBytes,
SQL_VARIANT_PROPERTY ( $ , 'MaxLength' ) AS MaxLength
UNION ALL
SELECT
.50,
SQL_VARIANT_PROPERTY ( .50 , 'BaseType' ),
SQL_VARIANT_PROPERTY ( .50 , 'Precision' ),
SQL_VARIANT_PROPERTY ( .50 , 'Scale' ),
SQL_VARIANT_PROPERTY ( .50 , 'TotalBytes' ),
SQL_VARIANT_PROPERTY ( .50 , 'MaxLength' )
результаты:
Value BaseType Precision Scale TotalBytes MaxLength
0.00 money 19 4 10 8
2.50 money 19 4 10 8