Bonjour,
salut les ami
j'ai un champs qui s'apple (codestagiere) dans la base mysql qui es compose des chiffre "10.456.07" et je veux que le resulta de tma requete sql "select...." affiche seulement 456 .
comment faire et merci beaucoup.
Bonjour,
salut les ami
j'ai un champs qui s'apple (codestagiere) dans la base mysql qui es compose des chiffre "10.456.07" et je veux que le resulta de tma requete sql "select...." affiche seulement 456 .
comment faire et merci beaucoup.
instr et substr est la méthode la plus simple...
mais bon, il y a des alternatives pour le fun
edit: je n'ai pas testé la 2e variante car je n'ai pas de 11g sous la main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 select mod(trunc(to_number('10.456.07','99G999G99' ,'NLS_NUMERIC_CHARACTERS='',.''')/100),1000) n from dual; N ---------- 456 select regexp_substr('10.456.07','[^.]*',1,1,null,2) n from dual; N --- 456
edit: ou, plus simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select substr('10.456.07',4,3) n from dual; N --- 456
Mais où allez-vous chercher ça ???
Question plus sérieuse : est-ce réellement juste pour le fun d'écrire une requête "farfelue" (*) où est-ce que ces formes d'écritures sont réellement plus intérêssantes
?
(*) je me souviens avoir vu un concours de code C où le but du jeu était de faire un programme relativement simple avec une seule instruction, d'où une écriture totalement illisible...![]()
Ca a l'air sympa comme concours !![]()
regexp_substr par exemple est beaucoup plus lent que substr et instr, je ne l'employerais donc pas dans cet exemple. Mais regexp_substr est beaucoup plus puissant, si par exemple le séparateur peut être . ou , et que les règles sont trop complexes pour faire un substr et un instr, alors ça peut être intéressant.
Quand à to_number et trunc et mod, cela permet de vérifier qu'on a bien des nombres et sinon ça renvoye une erreur (ce qui peut être bien ou mal, à voir)
La troisième solution de n'employer que SUBSTR sans instr est aussi sans doute intéressante. ça dépend des données.
Il vaut mieux employer
SUBSTR(, INSTR(), INSTR() )
que
REGEXP_SUBSTR
mais il vaut mieux employer
REGEXP_SUBSTR(,,)
que
CASE WHEN ... LIKE ... THEN SUBSTR(,INSTR(),INSTR()) WHEN ... LIKE ... THEN SUBSTR() || SUBSTR() ELSE SUBSTR () END...
bon, ça dépend tout de la qualité des données.
ça devait être ça je pense...
http://www0.us.ioccc.org/main.html
tu parles du concours que Korn (l'auteur du Korn Shell) avait gagné en 1987 avec
http://www.ioccc.org
Code : Sélectionner tout - Visualiser dans une fenêtre à part main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
![]()
salut les amis pour votre reponse
il ya une autre methode qui j'ai vu dans le web qui consiste a supprimer les 2 chiffre qui ont apres et avant le point car le nombre qui est aumilieu peut etre long par fois "10.456.07" ou "10.1023.07"
et le resultet doit donner
R
-----
456
1023
et merci a tous
Si ce ne sont que des chiffres, oui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SELECT LTRIM(RTRIM(RTRIM(LTRIM('123.4567.54810', '0123456789'), '0123456789'), '.'), '.') FROM dual
merci mcm
est ce que ne peut pas utiliser cette methode avec "instr"
thx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 WITH t AS (SELECT '123.4567777.789' AS a FROM dual) SELECT a, SUBSTR(a, INSTR(a, '.') +1, INSTR(a, '.', 1,2) - INSTR(a, '.')-1) FROM t
Partager