SQL příkaz a přetypování int

Tomáš

SQL příkaz a přetypování int
« kdy: 23. 06. 2014, 11:34:51 »
Ahoj, měl by jeden hloupý dotaz a ale nepříjemně mě překvapil.
Mám zjednodušený sql příkaz tabulky prijemky, nicméně doklad je VARCHAR(50) a id int(9), vyhledávám podle ID(číslo příjemky) nebo dokladu. Nicméně pokud doklad začíná na číslo je nalezen záznam doklad '3CD...' ale také je převeden id na int a proto my vyhoví i id = 3 kde dělám chybu ? Respektive dá se databáze (MYSQL) donutit nepřekládat string na int ale na null či "" ?

SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` = '3CD'


mysql> SELECT `prijemky`.*
    -> FROM `prijemky`
    -> WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` = '3CD' ;
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
| id | doklad    | dodavatel      | datum_prijeti | poznamka | vlozeno             | zamestnanec_id | upraveno            | stav |
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
|  3 | 214000915 | FIRMA | 2014-01-15    |          | 2014-01-16 14:01:10 |              6 | 2014-01-20 11:34:48 |    1 |
+----+-----------+----------------+---------------+----------+---------------------+----------------+---------------------+------+
1 row in set, 1 warning (0.00 sec)


Kit

Re:SQL příkaz a přetypování int
« Odpověď #1 kdy: 23. 06. 2014, 11:49:54 »
Stačí neporovnávat mezi sebou string a integer.

Tomáš

Re:SQL příkaz a přetypování int
« Odpověď #2 kdy: 23. 06. 2014, 11:54:17 »
Děkuji, ale to mi taky došlo.
Samozřejmě můžu přidat funkci a testovat vstup pak rozhodnout jakou variantu zvolit. Ale co když doklad  bude 234 ? Nebo budu požadovat po uživateli výběr hledaného sloupce ID/DOKLAD. Nicméně považuju to za krok zpět. Proto hledám zda není cesta přes sql.

telra

Re:SQL příkaz a přetypování int
« Odpověď #3 kdy: 23. 06. 2014, 12:27:52 »
SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR `prijemky`.`id` LIKE '3CD'

e3k

Re:SQL příkaz a přetypování int
« Odpověď #4 kdy: 23. 06. 2014, 15:37:15 »
cital som tvoju otazku viac krat asi chces toto:

SELECT `prijemky`.*
FROM `prijemky`
WHERE `prijemky`.`doklad` LIKE '3CD%' OR (`prijemky`.`id` = '3CD' and '3CD' REGEXP '[0-9]+')


e3k

Re:SQL příkaz a přetypování int
« Odpověď #5 kdy: 23. 06. 2014, 15:51:18 »
alebo pouzi BINARY na ten string s ID