T-SQL美元签到表达式

时间:2015-05-20 09:32:50

标签: sql sql-server tsql

this answer中,有一个技巧允许ROW_NUMBER()窗口函数使用'常量'在ORDER BY子句中:

SELECT ROW_NUMBER() OVER (ORDER BY $/0) 
FROM master..spt_values 

在谷歌进行一些搜索后,我无法找到在这种情况下美元符号的含义是什么?

我试图执行一个简单的查询:

SELECT $;

它返回0

有人可以解释一下吗?

2 个答案:

答案 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