sql server tip. Кто не знал ставте +1
От: кубик  
Дата: 03.04.15 13:08
Оценка: 34 (5) +5
Оказывается "select 1s" тоже самое что "select 1 as s"
Re: sql server tip. Кто не знал ставте +1
От: Sinix  
Дата: 03.04.15 13:25
Оценка: :))
Здравствуйте, кубик, Вы писали:

К>Оказывается "select 1s" тоже самое что "select 1 as s"


Я это выучил более сложным способом:
select 0x0с from sys.objects o


только hex-маска была побольше.
Re: sql server tip. Кто не знал ставте +1
От: _ABC_  
Дата: 04.04.15 07:06
Оценка: 4 (1)
Здравствуйте, кубик, Вы писали:

К>Оказывается "select 1s" тоже самое что "select 1 as s"

Точнее, то же самое, что 'select 1 s'.

Никогда случайно не писал что-то вроде:
select*from sys.objects

?
Там даже подсветка синтаксиса подсказывает, как парсятся ключевые слова, оттуда можно
вывести и особенности парсинга числительных.
Re: sql server tip. Кто не знал ставте +1
От: Olaf Россия  
Дата: 04.04.15 18:50
Оценка: 1 (1)
Здравствуйте, кубик, Вы писали:

К>Оказывается "select 1s" тоже самое что "select 1 as s"


Псевдоним — это хорошо. Но что еще делает SQL Server — он в выражении, находит подвыражение, отделяет от алиаса, вычисляет его и приводит к правильному типу, если необходимо.
select $12_alias -- money
select 'May 9, 2015'_alias -- varchar
select 11111111111111111111111111111111111111_alias -- numeric
select 0x0DB6BFF656E04788B7E198865375381A_alias -- varbinary
select 1000*1.2e3_alias -- float
select 1_alias -- int
select exp(1)_alias
select getdate()_aslias
select dbo.ufnGetStock(1)_alias
Re[2]: sql server tip. Кто не знал ставте +1
От: кубик  
Дата: 06.04.15 05:36
Оценка:
O>Псевдоним — это хорошо. Но что еще делает SQL Server — он в выражении, находит подвыражение, отделяет от алиаса, вычисляет его и приводит к правильному типу, если необходимо.

А для чего так ?
Re[3]: sql server tip. Кто не знал ставте +1
От: Olaf Россия  
Дата: 06.04.15 19:16
Оценка:
Здравствуйте, кубик, Вы писали:

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.
Re: sql server tip. Кто не знал ставте +1
От: Olaf Россия  
Дата: 07.04.15 05:05
Оценка: 167 (3)
Здравствуйте, кубик, Вы писали:

К>Оказывается "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

Re[4]: sql server tip. Кто не знал ставте +1
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.04.15 05:53
Оценка: 20 (2)
Здравствуйте, Olaf, Вы писали:

O> Самому интересно, почему именно так реализовано. Ведь могли сослаться на некорректный синтаксис и не парсить выражение. Документация даже не упоминает о таком варианте.

Как это не упоминает?
Читаем https://msdn.microsoft.com/en-us/library/ms176104.aspx:

SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ] 
<select_list> 
<select_list> ::= 
    { 
            * 
      | { table_name | view_name | table_alias }.* 
      | {
          [ { table_name | view_name | table_alias }. ]
               { column_name | $IDENTITY | $ROWGUID } 
          | udt_column_name [ { . | :: } { { property_name | field_name } 
            | method_name ( argument [ ,...n] ) } ]
          | expression
          [ [ AS ] column_alias ] 
         }
      | column_alias = expression 
    } [ ,...n ]

Нужные нам компоненты выделены. Всё остальное — опционально.
То, что не нужен whitespace, вроде бы часть стандарта — см. ответ на http://stackoverflow.com/questions/4947486/is-whitespace-optional-in-sql-queries
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.