选择$(美元符号)

Hus*_*wzy 27 sql sql-server select

我在SQL Server方面有很好的经验,但突然间我发现了这个奇怪的SELECT命令

SELECT $ 
Run Code Online (Sandbox Code Playgroud)

要么

SELECT $ FROM tableName
Run Code Online (Sandbox Code Playgroud)

它一直返回零标量值(0.00),或者所有值都为的新列0.00

那是什么?

Ice*_*ind 24

当SQL Server遇到您的$标志时,它会自动将其转换为money数据类型.因为您在美元符号后没有显式值,所以SQL Server假设0.00.来自MSDN:

当转换为money或时smallmoney,整数被假定为货币单位.例如,整数值4将转换为相当于4美元的货币(对于us_english,默认语言).浮点值小数点右边的数字四舍五入到货币值的四位小数.正在转换为整数数据类型的数据类型char或varchar的表达式必须仅包含数字和可选的加号或减号(+或 - ).领先的空白被忽略了.转换为货币的数据类型char或varchar的表达式还可以包括可选的小数点和前导美元符号($).


Ale*_*ec. 12

经过一番混乱后,我发现无论使用什么货币符号都会发生这种情况,SQL服务器暗示该字段是货币字段.

如果您在货币符号后添加数字,在这种情况下为1美元:

SELECT $4
Run Code Online (Sandbox Code Playgroud)

SQL服务器将返回4.00

因此,SQL Server正在使用$并假设我们要创建一个具有MONEY数据类型的字段,并且因为我们没有在货币符号后输入值,SQL Server假定值为0,但在我看来这应该返回空值.

  • @HusseinFawzy SQL是一种完整的编程语言,它不仅用于查询表.例如,这将用于插入语句,或用于`WHERE unitprice <$ 1`.它在选择列中的可用性仅仅是因为语言的统一设计.您认为使用显式数字的事实是无用的意味着您认为显式数字本身是无用的. (4认同)