DB2 - problem z klauzulą IN

0

Cześć,
Może ktoś z Was będzie miał pomysł co jest nie tak bo moje już się wyczerpały. Wytłumaczcie mi, czemu w DB2, nie działa klauzula IN kiedy wewnątrz mam stringi. Dla przykładu, taki zapis:

...
WHERE CODE IN ('123', '234', '345')
...

Nie zwraca nic. Ale gdy już wstawię na samym początku jakąś liczbę, np 0:

...
WHERE CODE IN (0, '123', '234', '345')
...

nagle w cudowny sposób dla wartości podanych jako stringi, dane zaczynają być zwracane. Magia. Nie wiem o co chodzi.

2

Jakiego typu jest pole code?

0

Code jest typu VARCHAR ale w polu znajdują się same wartości liczbowe. Powiem Wam że to samo dzieje się z klienta bazodanowego. Również jak wprowadzę te wartości w tzw 'ciapkach' to mi nie wyszukuje a gdy wprowadzę jako pierwszą wartość bez, to nagle dla pozostałych kodów też zaczyna działać. Niestety w aplikacji w kodzie ten parametr znajdujący się w IN nie może być wpisany na sztywno bo tak bym sobie podał te wartości bez '' i wtedy działa. Ale to ma być parametryzowalne dlatego podaję te wartości z constów i gdzieś coś się po drodze dzieje, nie mam pojęcia co, że on sobie traktuje je jakoś stringi i nie zwraca nic. Nie chcę hardcodować wartości 0 a reszty z parametrów bo ktoś kto później zobaczy ten kod to powie że jakiś baran go pisał.

0

a jak napiszesz taki warunek WHERE CODE = '123' to Ci zwróci jakiś wynik?

0

Tak, wtedy zwraca. Dlatego to jest dla mnie bardzo dziwne. Ale identyczna sytuacja jest w kliencie bazodanowym. Ja akurat używam DBeaver'a. Jak daje w ciapkach jako string nie zwraca nic. Tylko wstawię jakąś cyfrę przed, tylko cyfrę cyfrę, bez '', nagle zapytanie ożywa i zwraca nawet wartości dla tych kodów wpisanych w ''. Magia. Zastanawiam się czy to nie jest jakiś bug DB2 i czy nie zgłosić PMR-a do IBM-a. Jak wpiszę te kody bezpośrednio w zapytaniu, bez '' to wówczas działa, a jak podaję z constów, mimo że tam mam je wpisane normalnie jako liczby, gdzieś, coś, nie wiem co, robi z nich stringi i do zapytania idą w ''. Nie wiem jak wymusić aby szły jako wartości liczbowe.

1

Nie znam się na db2, ale zakładam że jak dasz pierwsze 0 bez ', to zaczyna być to porównywane jako integery, czyli dokonujesz niejawnej konwersji typów. co nawet wynika z dokumentacji

Numeric is the dominant data type. If any of the operands is a numeric value, Db2 implicitly casts the character or graphic string operands to DECFLOAT data type.

https://www.ibm.com/support/knowledgecenter/en/SSEPEK_11.0.0/sqlref/src/tpc/db2z_implicitcaststr2num.html

Czyli obstawiam, że coś z code page kolumny nie jest zgodne z zapytaniem, pytanie jakie kodowanie ma kolumna code? https://knowledgebase.progress.com/articles/Article/3218

0

Hej,
którą wersję db2 masz ? Jak dokładnie to pole/tabelę definiujesz i możesz całe zapytanie wkleić.
Albo jest bug w db2 jeśli jest jakiś niski fixpack, albo w zapytaniu coś jest nie tak.

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