Подтвердить что ты не робот

SQL Использовать псевдоним в инструкции Where

Я понял, как использовать псевдоним в инструкции where.

Пример:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'

Я использую MSSQL 2005

4b9b3361

Ответ 1

Невозможно, но вы можете сделать следующее:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'

Не требуется никаких подзапросов или хаков

Ответ 2

Вы можете использовать "наличие" вместо "where".

SELECT
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM
    MyTable
HAVING
    Col1 = 'MySearch'

Выполнение "where" после выполнения запроса. Будьте осторожны, чтобы использовать его в правильных условиях, чтобы не было проблем с производительностью.

Ответ 3

Использовать подзапрос:

SELECT * 
FROM 
  (SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 FROM MyTable)
WHERE Col1 = 'MySearch'

Ответ 4

Вы можете сделать это:

SELECT Col1
FROM ( SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 ) AS x
WHERE Col1 = 'MySearch'

Ответ 5

SELECT * FROM (
  SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
  FROM MyTable
)
WHERE Col1 = 'MySearch'

(Я знаю, что это работает в Oracle, я считаю, что это стандартный SQL и будет работать в MSSQL.)

Ответ 6

Я думаю, что это невозможно, но, возможно, вы можете взглянуть на выражения Common Table над SQL 2005

Вот так:

WITH MyCTE( Col1) AS
(
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
)
SELECT *
FROM MyCTE
WHERE Col1 = 'MySearch'

Ответ 7

используйте представление или производную таблицу.

Используя производную таблицу, ваш пример будет выглядеть так:

select col1 
from 
(SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable) 
where col1='Mysearch'

Ответ 8

Собственно, использование псевдонима не сделает ваш запрос более быстрым, поскольку оптимизатор SQL не так глуп, как вы думаете, поэтому я бы просто повторил выражение SUBSTRING еще раз.

Ответ 9

Ответ: вы не можете - вы можете это сделать

SELECT 
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM 
    MyTable
WHERE 
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'