有人可以向我解释一下这个查询的内容吗?
select 99.foo
它的行为与
相同select 99 as foo
或
select foo = 99
此外,它似乎只适用于整数。
答案 0 :(得分:7)
select 99.foo
被翻译为select 99. as foo
(因为您可以在别名之前省略空格),选择“99”。作为numeric
。由于小数点后面没有数字,它只显示'99'。
您可以通过以下方式确认:
select sql_variant_property(99., 'BaseType')
返回numeric
。
与select 99 as foo
相同,后者选择“99”,但选择int
。这可以通过runnning确认:
select sql_variant_property(99, 'BaseType')
返回int
。
尽管所有三个查询看起来都是相同的,但第一个查询与返回值的类型中的下两个不同。
答案 1 :(得分:1)
'AS'是可选的,因此select 99 foo
有效。
尾随句点被解释为“零点”,因此select 99. foo
也有效。
并且值和别名之间不一定有空格,因此select .99foo
也可以。
这些也有效:
select 99foo
select 'ninetynine'foo
答案 2 :(得分:0)
您可以撰写SELECT col AS name
以返回名称为col
的{{1}}列。允许遗漏name
,意味着AS
是同一个东西,但也允许它们之间留出空间。在您的示例中,SELECT col name
是数字99,99.
是列名。在foo
示例中,$.foo
是$.
值为0的文字,这就是它输出MONEY
的原因。
答案 3 :(得分:0)
显然令人困惑的部分可能是。在99之后,这使得它看起来像是在查询属于名为99的对象的字段。
真的很奇怪,你可以做到
SELECT 99foo
和
SELECT 99AS foo
两者都有效(并在名为foo的列中给出一个int)。使用示例。似乎回归各种数字。 我会说解析器试图变得聪明。如果您认为数据是非数字字段类型之一,那么您将数据包含在撇号中,因此您的意思是数字。因此,任何不是数字的东西都被用来推断别名。