COALESCE i dziwne zachowanie, zwraca NULL

0

Witam,
Mam kilka ciekawych zapytań, poniżej tylko wycinki z nich. Na razie nie potrafię sobie tego wyjaśnić.

  1. Zapytanie:
COALESCE (cast(cast ((q1.CENA/dmp.CENA-1)*100 as decimal(10,2)) as varchar(8)) + '%', '-')

Jeżeli (q1.CENA/dmp.CENA-1) jest NULLem bo q1.CENA jest NULL lub dmp.CENA jest równa 0 (dzielenie przez zero).
To jeżeli wykonam te zapytanie, a jestem połączony poprzez MSSQL Management Studio to zwraca poprawnie '-'.
Natomiast jak wykonuje te zapytanie przez PHP to zwraca mi %. Tak jakby nie traktował tego jako NULL.

2
Dla q3.ZMIENIAJACY = NULL

Zapytanie:

COALESCE(q3.ZMIENIAJACY,'-')

też zwraca NULL

Zapytanie:

COALESCE(cast(q3.ZMIENIAJACY as varchar(25)),'-')

zwraca poprawnie '-'.

Dla q1.DATA_UTWORZENIA = NULL

Zapytanie:

COALESCE (q1.DATA_UTWORZENIA, '-') as DATA_UTWORZENIA_POPRZ

też zwraca NULL
... a chyba powinno zwrócić '-'?

dmp w powyższych zapytaniach to prefix tabeli w tym samym SELECT-ie.
q1, q3 to wyniki z podzapytań w uproszczeniu:

SELECT value, q1.value2 from DOK_MAG_POZ dmp left join (SELECT ...) q1 on q1.ID=dmp.ID

Macie pomysły dlaczego tak się dzieje?

0

Pokaż kod PHP.

0
$connect[$b]['result_con'] = mssql_connect($connect[$b]['ip'], $connect[$b]['username'], $connect[$b]['password']);
$connect[$b]['result_db'] = mssql_select_db($connect[$b]['dbname'], $connect[$b]['result_con']);
mssql_query('set arithabort off; set ansi_warnings off');
mssql_query($query);

W powyższym kodzie query to już właściwe zapytanie.

0

Udało się komuś rozgryźć?

0
COALESCE(ISNULL(q3.ZMIENIAJACY, ''),'-')
0

Dlaczego?
Czy COALESCE to nie to samo co ISNULL, tylko z możliwością przyjmowania nieograniczonej ilości parametrów?

1 użytkowników online, w tym zalogowanych: 0, gości: 1