T-SQL美元签到表达式

Ale*_*mov 6 sql t-sql sql-server

这个答案中,有一个技巧允许ROW_NUMBER()ORDER BY子句中使用带有"常量" 的窗口函数:

SELECT ROW_NUMBER() OVER (ORDER BY $/0) 
FROM master..spt_values 
Run Code Online (Sandbox Code Playgroud)

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

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

SELECT $;
Run Code Online (Sandbox Code Playgroud)

它回来了0.

有人可以解释一下吗?

Dam*_*ver 6

它只是一个money常量(T-SQL称之为文字).

如果你看到表达式$2.50,你可能不会感到惊讶,这只是另一个常数.

其他一些例子:select £,¢,¤,¥,€所有都返回0.


确定您在T-SQL中查看的数据类型可能很棘手.一个技巧,如果你怀疑你知道它是什么类型是选择不兼容的类型并尝试转换:

select CONVERT(date,$)
Run Code Online (Sandbox Code Playgroud)

结果:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type money to date is not allowed.
Run Code Online (Sandbox Code Playgroud)

  • `SELECT SQL_VARIANT_PROPERTY($,'BaseType')`会更好. (6认同)