Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL]działania na varchar
maksik
post
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


Co mogę zrobić gdy chcę pobrać rekordy z tabeli VARCHAR która zawiera liczby, a ja chce określić zakres rekordów WHERE liczba >'20' and liczba <'50' oczywiscie nie zwraca mi poprawnych wyników gdyż to VARCHAR a większość rekordów jest w formacie typu "20,20" , "43,12", (po przecinku) w jaki sposób ustalić ten zakres gdyż nie mogę zmienić tabeli na INT ponieważ jest pobierana wp_postsmeta przez co są tam dane zawierające inne znaki niż cyfrowe?

Ten post edytował maksik 28.05.2014, 07:34:41
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro format przechowywanych danych to "20,20" , "43,12" to jak niby ma dzialac warunek >20?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


  1. SELECT * FROM tabela WHERE cast(liczba AS DECIMAL(4,2)) BETWEEN 20 AND 50;

Może coś w ten deseń. Nie wiem czy zadziała, pisane z palca i na czuja (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
maksik
post
Post #4





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


to jest pobierane z tabeli wordpresa i dlatego nie wiem czy przy pobieraniu rekordu jest możliwa jakaś kompresja do decimal? zmiany w samej tabeli danych nie można dokonać.

Ten post edytował maksik 28.05.2014, 07:44:00
Go to the top of the page
+Quote Post
Pyton_000
post
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A jaki problem zmienić zapytanie? I o jakiej kompresji mówisz
Go to the top of the page
+Quote Post
maksik
post
Post #6





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


twoje zapytanie działa, dzięki

jeszcze tylko mam pytanie, gdzie rekord składa się z 3 cyfr przed przecinkiem np. jest to 105,20 zwraca zapytanie pusty wynik jeżeli ustawiam zakres na np. liczba >'70' and liczba < '110'

Ten post edytował maksik 28.05.2014, 08:23:32
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zamień poprzedni Cast na ten
  1. CAST(REPLACE(liczba, ',', '.') AS DECIMAL(10,2))
Go to the top of the page
+Quote Post
maksik
post
Post #8





Grupa: Zarejestrowani
Postów: 206
Pomógł: 0
Dołączył: 26.09.2012

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


nic nie dało dokładnie to wygląda tak

  1. SELECT * FROM tabela WHERE cast(REPLACE(liczba, ',', '.') AS DECIMAL(10,2)) and liczba > '80' and liczba < '110'


natomiast ten działa

  1. SELECT * FROM tabela WHERE cast(REPLACE(liczba, ',', '.') AS DECIMAL(10,2)) and liczba > '50' and liczba < '80'
Go to the top of the page
+Quote Post
Pyton_000
post
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


A widziałeś żeby u mnie liczby były w ' ?
To na pewno działa
  1. SELECT * FROM test WHERE cast(REPLACE(liczba, ',', '.') AS DECIMAL(10,2)) BETWEEN 80 AND 110;
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: 17.09.2025 - 20:03