Ranię, jak mogę użyć aliasu w instrukcji where.SQL Użyj aliasu w instrukcji Where
Przykład:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'
Używam MSSQL 2005
Ranię, jak mogę użyć aliasu w instrukcji where.SQL Użyj aliasu w instrukcji Where
Przykład:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'
Używam MSSQL 2005
niemożliwe, ale można wykonać następujące czynności:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'
Brak wymaganych podkwerend lub hacków
myślę, że nie jest możliwe, ale może można spojrzeć na wspólnym stole zgłaszanie nad SQL 2005
tak:
WITH MyCTE(Col1) AS
(
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
)
SELECT *
FROM MyCTE
WHERE Col1 = 'MySearch'
SELECT * FROM (
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
)
WHERE Col1 = 'MySearch'
(wiem, że to działa w Oracle, uważam, że jest standardem SQL i będzie działać w MSSQL.)
Prawdopodobnie będzie wolniej, jeśli wewnętrzne zapytanie stanie się złożone. –
Użyj podkwerenda:
SELECT *
FROM
(SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 FROM MyTable)
WHERE Col1 = 'MySearch'
użyj widoku lub tabeli pochodnej.
Korzystanie tabelę pochodzącą Twój Przykładem może wyglądać następująco:
select col1
from
(SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable)
where col1='Mysearch'
Odpowiedź brzmi nie można - można to zrobić
SELECT
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM
MyTable
WHERE
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'
Faktycznie, używając pseudonimu nie będzie twój zapytanie szybsze, ponieważ optymalizator SQL nie jest tak głupi, jak ci się wydaje, więc po prostu powtórzę wyrażenie SUBSTRING.
Dla mnie szuka sposobu na łatwiejsze odczytanie zapytania. –
To trochę naruszenie zasady DRY, prawda? Gdy modyfikujesz klauzulę select, musisz również zmodyfikować WHERE ... –
Dodanie podzapytania lub użycie opcji Ma sprawi, że zapytanie będzie bardziej złożone, co jest gorsze niż dwukrotne powtórzenie takiego prostego wyrażenia. – zvolkov
Można to zrobić:
SELECT Col1
FROM (SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1) AS x
WHERE Col1 = 'MySearch'
Można użyć "mieć", a nie "gdzie".
SELECT
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM
MyTable
HAVING
Col1 = 'MySearch'
Po wykonaniu czynności "gdzie" po wykonaniu zapytania. Należy uważać, aby używać go w odpowiednich warunkach, aby nie występował problem z wydajnością.
Ale co, jeśli funkcja tworząca col1 jest wymagająca. Następnie uruchamiasz go dwa razy? (Podciągu 4 razy w tym przypadku) – DavidVdd
I, powielacie kod. Instrukcja klauzuli select jest taka sama, jak klauzula where, która podwaja wysiłek utrzymania. –