Oprettet tir. d. 07. december 2004 kl. 13:01:02

d_warma
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

senj
senj (30.768 point)
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

d_warma
d_warma (17.230 point)
Det ændrer ikke noget. Har du selv forsøgt??

Skrevet tir. d. 07. december 2004 kl. 13:10:06| #3

senj
senj (30.768 point)
SELECT RTRIM(substr('123410016',0,5)) FROM DUAL jo denne alene?

Skrevet tir. d. 07. december 2004 kl. 13:13:44| #4

d_warma
d_warma (17.230 point)
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

senj
senj (30.768 point)
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

senj
senj (30.768 point)
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

senj
senj (30.768 point)
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

teepee
teepee (34.356 point)
select substr(l_tekst, length(l_tekst)-4) from dual;

Skrevet tir. d. 07. december 2004 kl. 14:17:02| #9

d_warma
d_warma (17.230 point)
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

d_warma
d_warma (17.230 point)
teepee.
Problemet er ikke substring funktionen, men RTRIM funktionen.
Men tak for buddet.

Skrevet tir. d. 07. december 2004 kl. 14:26:21| #11

senj
senj (30.768 point)
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

d_warma
d_warma (17.230 point)
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

senj
senj (30.768 point)
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

d_warma
d_warma (17.230 point)
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

senj
senj (30.768 point)
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

d_warma
d_warma (17.230 point)
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

senj
senj (30.768 point)
Point betyder ik noget :-)

- Skulle bare lige redde æren du ved.

Vh
senj

Skrevet tir. d. 07. december 2004 kl. 15:16:08| #18

d_warma
d_warma (17.230 point)
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


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Oracle testserver/db

Oprettet den 11. maj 2012 kl. 08.23
chalde giver 30 point for svar | Giv et svar »

Select Varray into table

Oprettet den 15. marts 2012 kl. 14.34
thorvall giver 30 point for svar | Giv et svar »

Apps DBA-rådgivning, E-business Suite.

Oprettet den 15. januar 2012 kl. 20.20
steber giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger