Здравствуйте, кубик, Вы писали:
К>Оказывается "select 1s" тоже самое что "select 1 as s"
Псевдоним — это хорошо. Но что еще делает SQL Server — он в выражении, находит подвыражение, отделяет от алиаса, вычисляет его и приводит к правильному типу, если необходимо.
O>Псевдоним — это хорошо. Но что еще делает SQL Server — он в выражении, находит подвыражение, отделяет от алиаса, вычисляет его и приводит к правильному типу, если необходимо.
Здравствуйте, кубик, Вы писали:
O>>Псевдоним — это хорошо. Но что еще делает SQL Server — он в выражении, находит подвыражение, отделяет от алиаса, вычисляет его и приводит к правильному типу, если необходимо.
К>А для чего так ?
Самому интересно, почему именно так реализовано. Ведь могли сослаться на некорректный синтаксис и не парсить выражение. Документация даже не упоминает о таком варианте. Только стандартный синтаксис – использование пробела, равно = и ключевое слово as. Сам псевдоним может обрамляться в одинарные и двойные кавычки, а так же скобки.
select 1 as alias
,1 as [alias]
,1 as "alias"
,1 as 'alias'
,1 alias
,1 [alias]
,1 "alias"
,1 'alias'
,alias = 1
,[alias] = 1
,"alias" = 1
,'alias' = 1
Вариант с одинарными кавычками 'alias' = 1 в 2014 сервере помечен как deprecated.
Здравствуйте, кубик, Вы писали: К>Оказывается "select 1s" тоже самое что "select 1 as s"
Если к такой нотации псевдонимов прикрутить таблицу с колонкой начинающейся с цифры, то получится интересная головомка. Хотя наверно это больше относится к разряду как не нужно делать.
if (object_id('tempdb..#temp')) is not null
drop table #temp
create table #temp
(
[2col] int
)
insert into #temp
select 1
Для таблицы со структурой представленной выше что вернет запрос вида ?
select 2col, [2col], '2col', "2col"
from #temp as t1
Ответ
Кстати, на sqlfiddle.com проверил остальные СУБД на предмет выполнения запроса select 2col:
MySQL 5.6 не выполнил запрос и вернул сообщение — Unknown column '2col' in 'field list'
Oracle 11g R2 успешно выполнил запрос select 2col from dual и вернул 2
PostgreSQL 9.3 успешно выполнил запрос и вернул 2
SQLite (WebSQL) не выполнил запрос и вернул сообщение — could not prepare statement (1 unrecognized token: "2col")
SQLite (SQL.js) не выполнил запрос и вернул сообщение — TypeError: Cannot read property 'substring' of undefined
Здравствуйте, Olaf, Вы писали:
O> Самому интересно, почему именно так реализовано. Ведь могли сослаться на некорректный синтаксис и не парсить выражение. Документация даже не упоминает о таком варианте.
Как это не упоминает?
Читаем https://msdn.microsoft.com/en-us/library/ms176104.aspx: