有人可以请向我解释这个查询是怎么回事?不寻常的T-SQL - 这里发生了什么?
select 99.foo
它表现一样
select 99 as foo
或
select foo = 99
此外,它只会出现与整数工作。
有人可以请向我解释这个查询是怎么回事?不寻常的T-SQL - 这里发生了什么?
select 99.foo
它表现一样
select 99 as foo
或
select foo = 99
此外,它只会出现与整数工作。
的select 99.foo
被译为select 99. as foo
(你可以离开了别名前的空格),选择'99“。作为numeric
。由于小数点后没有数字,它只显示'99'。
可以通过运行证实了这一点:
select sql_variant_property(99., 'BaseType')
返回numeric
。
这是不是与select 99 as foo
相同,它确实选择'99',但是作为int
。这可以通过捉迷藏予以确认:
select sql_variant_property(99, 'BaseType')
返回int
。
尽管所有三个查询看起来都是相同的,但第一个与返回值类型中的下两个查询不同。
'AS'是可选的,所以select 99 foo
的作品。
追尾期间被解释为“零点”,因此select 99. foo
也可以使用。
而且值和别名之间不一定有空格,所以select .99foo
也适用。
这些也行:
select 99foo
select 'ninetynine'foo
您可以编写SELECT col AS name
使col
列返回名称name
。允许省略AS
,这意味着SELECT col name
是同样的事情,但它也可以省去它们之间的空间。在你的例子中,99.
是数字99,而foo
是列名。在$.foo
示例中,$.
是MONEY
值为0的字面值,这就是输出为0.00
的原因。
显然令人困惑的部分大概是。在99之后,这使得它看起来像是在查询一个属于99的对象的字段。
就真的是不可思议,你可以做
SELECT 99foo
和
SELECT 99AS foo
这两个工作(并给予一列叫做foo的一个int)。使用示例。似乎返回各种数字。 我会说解析器试图变得聪明。如果您的数据是非数字字段类型之一,那么您会将数据封装在撇号中,因此您的意思是数字。因此,任何不是数字的东西都被用来推断别名。
有趣; SELECT $ .foo将返回0.00 – mg1075 2011-02-09 23:50:40