Wybierz z Zamień ()
Mam tabelę nazw i adresów zawierającą kolumnę z kodami pocztowymi. Chcę usunąć spacje z kodów pocztowych i wybrać te, które pasują do określonego wzoru. Próbuję to zrobić (trochę nadmiernie) w T-SQL na SQL Server 2005:
SELECT Replace(Postcode, ' ', '') AS P
FROM Contacts
WHERE P LIKE 'NW101%'
Ale pojawia się następujący błąd;
Msg 207, Level 16, State 1, Line 3
Invalid column name 'P'.
Jeśli usunę klauzulę WHERE, otrzymam listę kodów pocztowych bez spacji, co chcę znaleźć. Jak mam do tego podejść? Co ja robię źle?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
8 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Możesz ponownie użyć tej samej logiki w klauzuli :
Lub użyj podzapytania aliasu zgodnie z opisem w odpowiedziach Nicka.
Anonimowy użytkownik
Potwierdzenie od:
Pamiętaj, aby podać owinięty alias, nawet nieużywany (SQL Server nie pozwala na niego bez jednego IIRC)
Anonimowy użytkownik
Potwierdzenie od:
dodaj obliczoną kolumnę PERSISTED:
aby po prostu naprawić kolumnę, usuwając spacje, użyj:
teraz możesz wyszukiwać w ten sposób lub wybrać, możesz użyć indeksu:
lub
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
lub możesz uczynić z tego podzapytanie
Anonimowy użytkownik
Potwierdzenie od:
Odpowiedź Odeda
https://coderoad.ru/2652095/
Twój model koncepcyjny wymaga tutaj niewielkiej korekty. Aliasy nazw kolumn (klauzule na liście ) występują bardzo późno w przetwarzaniu , więc aliasy nie są dostępne dla
WHERE propozycje. W rzeczywistości jedyną rzeczą, która dzieje się po spłaszczeniu kolumn, jest sortowanie, więc (cytując dokumenty w[code]SELECT
): [/code]można używać w kolejności określonej w akapicie. Nie można go jednak używać w klauzuli , ani .
Jeśli masz mylące wyrażenie na liście , możesz martwić się, że zostanie ono „ocenione dwukrotnie”, gdy pojawi się na liście i (powiedzmy) - jednak silnik zapytań jest wystarczająco inteligentny, aby zrozumieć, co się dzieje. Jeśli chcesz uniknąć podwójnego pojawiania się wyrażenia w zapytaniu, możesz zrobić coś takiego
co pozwala na dwukrotne uniknięcie fizycznego pojawienia się .
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od: