d_warma
(17.230 point. Point ude: 1.700)
RTRIM problem??
Hej,
Jeg sidder og skal fjerne de sidste 4 karakterer i en streng med variabel længde:
SELECT RTRIM('123420016',substr('abcd0016',-4,4)) "RTRIM e.g."
FROM DUAL;
RTRIM
-----
12342
Hvilket virker fint nok.
Men hvis jeg kører denne sql:
SELECT RTRIM('123410016',substr('abcd0016',-4,4)) "RTRIM e.g."
FROM DUAL;
RTRI
----
1234
Så går det galt, jeg havde forventet:
RTRI
----
12341
Det samme sker gælder for 123400016, 123460016. Det lader til, at det er (0, 1, 6) der giver disse resultater (de tal indgår i det, som skal slettes)
Er der nogen der har en forklaring på dette? Eller en workaround?
Mvh
D_Warma
Skrevet tir. d. 07. december 2004 kl. 13:08:31| #1
Hvad med denne?
SELECT RTRIM(substr('123410016',0,5),substr('abcd0016',-4,4)) "RTRIM" FROM DUAL
Skrevet tir. d. 07. december 2004 kl. 13:09:22| #2
Det ændrer ikke noget. Har du selv forsøgt??
Skrevet tir. d. 07. december 2004 kl. 13:10:06| #3
SELECT RTRIM(substr('123410016',0,5)) FROM DUAL jo denne alene?
Skrevet tir. d. 07. december 2004 kl. 13:13:44| #4
Det er en variable længde char-streng.
Dvs. at den også skal gælde på 123456780016, hvor jeg skal fjerne 0016 og returnere 12345678.
Skrevet tir. d. 07. december 2004 kl. 13:15:12| #5
Tror du roder lidt med trim, da du forkorter (substr) din trim klausul og du skal vel substringe dit resultat?
Skrevet tir. d. 07. december 2004 kl. 13:29:29| #6
Ahha nu tror jeg at jeg ved hvad du vil:
SELECT SUBSTR('123456780016',0,length('123456780016')-4)A FROM DUAL
SELECT SUBSTR('12345678220016',0,length('12345678220016')-4)A FROM DUAL
SELECT SUBSTR('1234567822554880016',0,length('1234567822554880016')-4)A FROM DUAL
Prøv disse 3 SQL´s
Skrevet tir. d. 07. december 2004 kl. 13:32:36| #7
ovenstående 3 sql med RTRIM (trim fra højre efter 0016) giver samme resultat med følgende 3 sql´s:
SELECT RTRIM('123456780016','0016') A FROM DUAL
SELECT RTRIM('12345678220016','0016') A FROM DUAL
SELECT RTRIM('1234567822554880016','0016')A FROM DUAL
Skrevet tir. d. 07. december 2004 kl. 13:41:01| #8
select substr(l_tekst, length(l_tekst)-4) from dual;
Skrevet tir. d. 07. december 2004 kl. 14:17:02| #9
senj,
Har du prøvet at køre:
SELECT RTRIM('1234567810016','0016') A FROM DUAL
når det sidste ciffer 12345678(1)0016 før det der skal slettes er indeholdt i det der skal slettes '0016', så bliver det indsatte 1-tal også fjernet. Det samme gælder for 0 og 6?
Skrevet tir. d. 07. december 2004 kl. 14:24:03| #10
teepee.
Problemet er ikke substring funktionen, men RTRIM funktionen.
Men tak for buddet.
Skrevet tir. d. 07. december 2004 kl. 14:26:21| #11
Ja det er fordi 1-0-6 findes i den TRIMS klausul. Den stopper først med at trimme når den finder 1. char den ikke kan skifte (trimme). Står der altid 0016 tilsidst vil denne virke : SELECT SUBSTR('123456780016',0,length('123456780016')-4)A FROM DUAL virke
- det er den samme som ovenfor
Skrevet tir. d. 07. december 2004 kl. 14:49:25| #12
Kanon, nu fik jeg den til at virke.
Men det er vel teepee der kom med den rigtige løsning?
senj får alligevel lidt point for ihærdige forsøg på at overbevise mig
Skrevet tir. d. 07. december 2004 kl. 14:52:58| #13
Ikke enig!
Teepee´s løsning giver var:
select substr('1234567810016',length('0016')-4) from dual;
Det giver 1234567810016
??
Skrevet tir. d. 07. december 2004 kl. 15:01:41| #14
Vil du argumentere, at dine forslag ligger tættere på løsningen før teepee svarede, end teepee's svar (som rigtig nok ikke gav det ønskede resultat)?
Det ser umiddelbar ud til, at du ændrer dit svar efter teepee har svaret, således at det ligner teepee's svar mere end det ligner dine tidligere besvarelser.
Skrevet tir. d. 07. december 2004 kl. 15:04:47| #15
Slet ikke enig!
Se Kommentar: senj 07/12-2004 13:29:29, der er svaret. Teepee foreslår en substr magen til min 07/12-2004 13:41:01.
Skrevet tir. d. 07. december 2004 kl. 15:07:26| #16
Damn, du har ret...
Jeg har overset det i farten...
Kan jeg ændre det eller fodre dig med ekstra 30 point for at holde det hemmeligt ;o)..
Skrevet tir. d. 07. december 2004 kl. 15:09:02| #17
Point betyder ik noget :-)
- Skulle bare lige redde æren du ved.
Vh
senj
Skrevet tir. d. 07. december 2004 kl. 15:16:08| #18
Al ære til senj!!
Det er kommentaren fra senj 07/12-2004 14:26:21, der indeholder det korrekte svar.
Al ære til senj!!
Håber det redder det lidt ;o)
Skrevet tir. d. 07. december 2004 kl. 15:19:06| #19