Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mssql] Nie działa odmiana polecenia LIKE
Forum PHP.pl > Forum > Bazy danych > Microsoft SQL Server / MSDE
beel
Nie mam pojęcia dlaczego polecenie:

  1. SELECT DISTINCT * FROM DaneOsobowe WHERE wiek LIKE '[18 - 55]'


Nie wyświetla żadnych wartości skoro dane zawarte w tabeli DaneOsobowe się kwalifikują, ja to polecenie rozumiem tak, że wartości szukane są dla osób których wiek wynosi odpowiednio 18 lub 55 i mam takie w tabeli. Mam więc prośbe aby ktos przetestowal to polecenie u siebie i dał znać czy mu działa.

Czyli powinno być równoważne z poleceniem:

  1. SELECT DISTINCT * FROM DaneOsobowe WHERE wiek=18 OR wiek=55
Kicok
  1. SELECT DISTINCT * FROM DaneOsobowe WHERE wiek LIKE '[18 - 55]'


Tak tego nie zrobisz. Kwadratowe nawiasy oznaczają tu klasę znaków, więc twoje zapytanie pobiera wszystkie wiersze dla których pole wiek jest równe: '1', '8', ' ', '-' lub '5'.


PS. Czemu nie możesz stosować tego rozwiązania?
  1. SELECT DISTINCT * FROM DaneOsobowe WHERE wiek=18 OR wiek=55
beel
Moge jak najbradziej, a widocznie źle to jest wytłumaczone w ksiazce, bo z tamtad wynika niejednoznacznie, lecz jakby nie bylo jest niepoprawnie. Albo, że zwraca wartosci z tego przedialy pomiedzy 18 a 55 albo, że rekordy dla wartosci 18 lub 55.

Ale istote tego polecenia juz zrozumialem mimo tego blednego wyjasnienia na podst twojego postu winksmiley.jpg
Kicok
Zapytanie:
  1. SELECT DISTINCT * FROM DaneOsobowe WHERE wiek LIKE '[18 - 55]'

wyświetlałoby wartości z przedziału od 18 do 55, gdyby nie było spacji w kwadratowych nawiasach ;]
beel
Nieprawda, bo mam w tabeli dla kolumny wiek wartości: 25, 18, 55, 36, 31, 47, a po wydaniu tego powyższego polecenia nic mi nie wyświetla poza nazwami kolumn... Czy dam spacje czy nie taki sam wynik..
Kicok
Fakt, powyższy sposób zadziała jedynie dla jednocyfrowych danych:
  1. WHERE wiek LIKE '[2-8]'




Natomiast zapis w stylu:
  1. WHERE wiek LIKE '[13-58]'

jest przez MSSQL rozumiany jako:
Pobierz wszystkie wiersze w których wiek
- jest równy 1 LUB
- jest z zakresu 3-5 LUB
- jest równy 8

Wygląda na to że przez LIKE się takiego zakresu otrzymać nie da i trzeba stosować:
  1. WHERE wiek BETWEEN 18 AND 55
beel
Cytat(Kicok @ 5.05.2007, 09:13:40 ) *
Fakt, powyższy sposób zadziała jedynie dla jednocyfrowych danych:
  1. WHERE wiek LIKE '[2-8]'


Nie sprawdzałem (jutro sprawdze), ale faktycznie w litertaurze jest to wykorzystane do poszukiwania w zbiorze wartosci gdzie wystepuja tylko jednocyfrowe dane. Szkoda tylko, że nie zaznaczono nic na ten temat.


pzdr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.