答案 0 :(得分:3)
看来SELECT \
仅返回0.00
。后面的列名称作为标签添加,类似于使用AS
。我不确定为什么\
等于0.00
。
答案 1 :(得分:1)
从注释中得出的答案是,SQL Server将反斜杠视为货币符号。这可以从查询结果中观察到,该查询返回money
类型的零值:
SELECT \ AS Backslash, ¥ AS Yen, $ AS Dollar;
结果:
+-----------+------+--------+
| Backslash | Yen | Dollar |
+-----------+------+--------+
| 0.00 | 0.00 | 0.00 |
+-----------+------+--------+
使用sp_describe_first_result_set
获取结果集元数据显示返回了money
类型:
EXEC sp_describe_first_result_set N'SELECT \ AS Backslash, ¥ AS Yen, $ AS Dollar;';
结果(省略多余的列):
+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+
| is_hidden | column_ordinal | name | is_nullable | system_type_id | system_type_name | max_length | precision | scale |
+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+
| 0 | 1 | Backslash | 0 | 60 | money | 8 | 19 | 4 |
| 0 | 2 | Yen | 0 | 60 | money | 8 | 19 | 4 |
| 0 | 3 | Dollar | 0 | 60 | money | 8 | 19 | 4 |
+-----------+----------------+-----------+-------------+----------------+------------------+------------+-----------+-------+
在这种情况下,这种行为尤其不直观,因为SQL Server允许人们指定不带金额的货币前缀作为货币文字。如果未指定金额,则结果货币值为零。
This Wiki article引起了普遍的反斜杠和日元标记的混淆。通过运行以下查询以返回反斜杠字符串文字,可以从SSMS中观察到这一点。例如,当结果以字体MS Gothic
显示时,结果字符字形为¥
(日元标记),而不是预期的反斜杠:
SELECT '\' AS Backslash;
结果:
+-----------+
| Backslash |
+-----------+
| ¥ |
+-----------+