TSql在反斜杠之前更改列值

时间:2019-10-18 20:11:49

标签: sql-server

因此,在键入命令时我有些费劲,最后发现在列名之前加一个反斜杠会使结果集返回零(对于多种数据类型)。

那是为什么?

例如屏幕截图

enter image description here

2 个答案:

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