在this answer中,有一个技巧允许ROW_NUMBER()
窗口函数使用'常量'在ORDER BY
子句中:
SELECT ROW_NUMBER() OVER (ORDER BY $/0)
FROM master..spt_values
在谷歌进行一些搜索后,我无法找到在这种情况下美元符号的含义是什么?
我试图执行一个简单的查询:
SELECT $;
它返回0
。
有人可以解释一下吗?
答案 0 :(得分:6)
它只是一个money
constant(T-SQL调用文字)。
如果你看到表达式$2.50
,你可能不会感到惊讶,这只是另一个常量。
其他一些例子:select £,¢,¤,¥,€
也都返回0。
确定您在T-SQL中查看的数据类型可能很棘手。一个技巧,如果你怀疑你知道它是什么类型就是选择一个incompatible type并尝试转换:
select CONVERT(date,$)
结果:
Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type money to date is not allowed.
答案 1 :(得分:2)
感谢 @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
$2.50,
SQL_VARIANT_PROPERTY ( $2.50 , 'BaseType' ),
SQL_VARIANT_PROPERTY ( $2.50 , 'Precision' ),
SQL_VARIANT_PROPERTY ( $2.50 , 'Scale' ),
SQL_VARIANT_PROPERTY ( $2.50 , 'TotalBytes' ),
SQL_VARIANT_PROPERTY ( $2.50 , 'MaxLength' )
结果:
Value BaseType Precision Scale TotalBytes MaxLength
0.00 money 19 4 10 8
2.50 money 19 4 10 8