Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mssql] Nie działa odmiana polecenia LIKE
beel
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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


Ten post edytował beel 4.05.2007, 11:07:28
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
beel
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Kicok
post
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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 ;]
Go to the top of the page
+Quote Post
beel
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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..
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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


Ten post edytował Kicok 7.05.2007, 16:16:27
Go to the top of the page
+Quote Post
beel
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 20.04.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:48