Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Dziwne wyniki z zapytania
krzesik
post
Post #1





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


Mam zapytanie jak poniżej:
  1. SELECT data_zgloszenia_szkody,
  2. IF(MONTH(`data_zgloszenia_szkody`)>9,CONCAT_WS('/', YEAR(`data_zgloszenia_szkody`), YEAR(`data_zgloszenia_szkody`)+1),CONCAT_WS('/', YEAR(`data_zgloszenia_szkody`)-1, YEAR(`data_zgloszenia_szkody`))) AS `sezon`
  3. FROM `szkody`;


oczekuję wyników np.
2014-01-01 | 2013/2013
2015-10-23 | 2014/2015
2015-01-02 | 2014/2015

a jednak otrzymuję:

2014-01-01 | 323031332f32303134
2015-10-23 | 323031352f32303136
2015-01-02 | 323031342f32303135

skąd te wyniki??

Ten post edytował krzesik 6.04.2015, 12:32:38
Go to the top of the page
+Quote Post
Aqu
post
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

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


Z jakiegoś powodu dostajesz te dane w formie hex:

http://www.unit-conversion.info/texttools/hexadecimal/
Go to the top of the page
+Quote Post
krzesik
post
Post #3





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


dziwne, pole w bazie jest w formacie `data` zapytanie tę wydaje się być ok, co może być powodem takiego wyniku, jak można tego uniknąć, lub co powinienem zmienić aby było to jak należy?

Zrobiłem tak:

  1. SELECT data_zgloszenia_szkody,
  2. IF(MONTH(`data_zgloszenia_szkody`)>9,UNHEX(CONCAT_WS('/', YEAR(`data_zgloszenia_szkody`), YEAR(`data_zgloszenia_szkody`)+1)),UNHEX(CONCAT_WS('/', YEAR(`data_zgloszenia_szkody`)-1, YEAR(`data_zgloszenia_szkody`)))) as `sezon`
  3. FROM `szkody`;


ale teraz wszystkie wyniki to: NULL
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Po co _WS?
Zwykły CONCAT starczy (wg mnie). Tylko, że to i tak dostajesz BLOB...
  1. SELECT data_zgloszenia_szkody,
  2. IF(MONTH(`data_zgloszenia_szkody`)>9,cast(CONCAT('/', YEAR(`data_zgloszenia_szkody`), YEAR(`data_zgloszenia_szkody`)+1) AS char),cast(CONCAT('/', YEAR(`data_zgloszenia_szkody`)-1, YEAR(`data_zgloszenia_szkody`)) AS char)) AS `sezon`
  3. FROM `szkody`;


Ten post edytował mmmmmmm 6.04.2015, 19:26:27
Go to the top of the page
+Quote Post
krzesik
post
Post #5





Grupa: Zarejestrowani
Postów: 516
Pomógł: 1
Dołączył: 25.08.2012

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


ale już jest lepiej! może coś jeszcze trzeba poprawić i będzie w 100% dobrze??
teraz jest tak:


2014-01-01 | /20132014

2015-10-23 | /20152016

2015-02-28 | /20142015








OK, temat rozwiązany, choć nie wiem dlaczego tak się działo - efekt został osiągnięty
metoda dla potomnych:
  1. SELECT data_zgloszenia_szkody,
  2. IF(MONTH(`data_zgloszenia_szkody`)>9,cast(CONCAT(YEAR(`data_zgloszenia_szkody`), '/', YEAR(`data_zgloszenia_szkody`)+1) AS char),cast(CONCAT(YEAR(`data_zgloszenia_szkody`)-1, '/', YEAR(`data_zgloszenia_szkody`)) AS char)) AS `sezon`
  3. FROM `szkody`;
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




Co do wywalenia _WS to mmmmmm chyba za bardzo zabalowal w te swieta (IMG:style_emoticons/default/wink.gif) Oczywiscie miales je zostawic lub poprawic na to co poprawiles teraz. Forma dowolna.

Cytat
choć nie wiem dlaczego tak się działo - efekt został osiągnięty
Bo concat sluzy do laczenia tekstow a nie liczb. A YEAR zwraca liczbe. Dlatego trzeba bylo rzytowac to na tekst
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: 26.09.2025 - 03:42