为什么此查询返回货币值?

Voo*_*Art 12 sql sql-server

今天我写了一个应该返回错误的查询.相反,它返回值为15的列名why和数据类型money.你知道为什么吗?

select \15why
Run Code Online (Sandbox Code Playgroud)

结果:

why
15.00
Run Code Online (Sandbox Code Playgroud)

Cod*_*ter 9

你指定一个常量:

货币常数表示为带有可选小数点和可选货币符号作为前缀的数字串

所以select €15导致一个money常数,同样如此select $15,以及select ¥15.

Jeroen 在评论中指出了一个特点:

因为日元符号(¥)是货币指示符,并且在某些原生日语字符集中,其代码点与ASCII中反斜杠的代码点相同.

另请参见MSDN:money和s​​mallmoney(Transact-SQL).

所以select \15似乎等于select ¥15.

至于列名:select 5a结果是带有别名的列,a值为5.因为"a"不是数字后缀,所以它被视为select 5 as a,其中"as"是可选的.而是select 5e返回5未命名的列,因为"e" 数字后缀.

所以你发现了一种不同的写作方式select ¥15 as why.

  • 反斜杠本身的奇怪之处是[详细记录](http://archives.miloush.net/michkap/archive/2005/09/17/469941.html),以及它在Windows上引起的奇怪现象.即使没有涉及日语排序规则,SQL Server也允许以货币形式存在额外的怪异性. (3认同)