Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:13 Der er 36 kommentarer og
3 løsninger

SQL >> sortering

Hej,

jeg har en kolonne med datatypen String. Den indeholder KUN tal, dvs der ville ikke opstå nogen former for fejl hvis datatypen ville blive lavet om til integer.

Når jeg sorterer stigende bliver der nu sorteret på følgende måde:

16237493
17289209
2789
34
54322

Det er tydeligvis uhensigtsmæssigt. Mit spørgsmål er om det ikke kan lade sig gøre at konvertere kolonnen i SQL-sætningen således, at den bliver sorteret som integer ville blive det?
Avatar billede ehf Nybegynder
08. oktober 2002 - 13:20 #1
select kolonne
  from tabel
order by to_number(kolonne);

Dette vil selvfølgelig fejle hvis bare en enkelt ikke indeholder tal.
Hvis du har indeks på kolonnen vil dette heller ikke kunne bruges.
Avatar billede psv Nybegynder
08. oktober 2002 - 13:21 #2
prøv med "order by to_number(dinkolonne)"
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:23 #3
hvad mener du hvis jeg har indeks på kolonnen?
Avatar billede eagleeye Praktikant
08. oktober 2002 - 13:23 #4
Det er fodi den sortere det som tekst og så kigger den tegne for tegn og finder ud af "1" < "2" osv derfor er sorteringen sådan. Hvis du lavede kolonnen som interger/tal så ville den sortere rigtigt så 34 kommer først så 54322 ovs.

Alternativt skal du i din SQL førtæller SQL fortoleren den skal tolke kolonnen som Integer, denne ville virker i Access men jeg ved ikke hvad samme konverteing hedder i Oracle:

SQL = "SELECT kolonne FROM tabel ORDER BY Int(kolonne)"
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:25 #5
jeg har prøvet order by int(kolonne) .. men den virker ikke - og det gør ..to_number(kolonne).. heller ikke :(

det var derfor jeg lige efterlyste den der med indekseringen - hvad er det?
Avatar billede psv Nybegynder
08. oktober 2002 - 13:32 #6
Hvis du kører Oracle virker to_number(strkolonne) da fint??
(Har lige testet det)
Avatar billede ehf Nybegynder
08. oktober 2002 - 13:32 #7
monstemand. Er din database en oracle database?
Avatar billede teepee Nybegynder
08. oktober 2002 - 13:33 #8
Det virker underligt at order by to_number(kolonnenavn) ikke skulle virke. Hvad med simpelhen at lave kolonnen om til en NUMBER i stedet for? alter tabelnavn modify kolonne number;
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:33 #9
ja den er, men det er ikke en jeg selv har lavet. Jeg sidder og arbejder med et system hvor man selv kan brugerdefinere hvilke udtræk man vil lave af databasen. Det er åbenbart ikke alt der er tilladt..jeg kan nemlig godt bruge to_char uden problemer
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:37 #10
SELECT
Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
FROM
sagshoved
WHERE
Spærret = 0 AND Slutfaktureret = 0 AND Afsluttet = 0 ORDER BY Sagsnummer

det er sådan den ser ud når den sorterer "forkert", eller rettere efter string-datatypen.

SELECT
Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
FROM
sagshoved
WHERE
Spærret = 0 AND Slutfaktureret = 0 AND Afsluttet = 0 ORDER BY to_number(Sagsnummer)

ved ovenstående får jeg fejken http://212.242.62.175/fejl.jpg
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 13:40 #11
Hvilke fejlkode får du når du forsøge at lave to_number?
Avatar billede psv Nybegynder
08. oktober 2002 - 13:41 #12
Prøv med:

select Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
from (select to_number(Sagsnummer) as SortFelt,
            Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
      from SagsHoved
      where Spærret = 0 and Slutfaktureret = 0 and Afsluttet = 0
      order by SortFelt)
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:42 #13
det eneste jeg får af fejl er http://212.242.62.175/fejl.jpg og så annullerer den opdateringen..
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:44 #14
psv >> så kommer den med nøjagtig samme fejlmeddelelse - dvs. den betragter to_number som værende en kolonne - og den findes selvfølgelig ikke..
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:46 #15
det er kun to_number den brokker sig over - hvis jeg fjerner den virker det som hidtil ..
Avatar billede eagleeye Praktikant
08. oktober 2002 - 13:46 #16
det er ikke sådan at to_numer skal skrivers med stort så??:

SELECT
Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
FROM
sagshoved
WHERE
Spærret = 0 AND Slutfaktureret = 0 AND Afsluttet = 0 ORDER BY TO_NUMER(Sagsnummer)
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 13:46 #17
Bruger du ODBC, ADO eller SQLNET/NET8 til at tilgå databasen?
Avatar billede eagleeye Praktikant
08. oktober 2002 - 13:47 #18
TO_NUMBER skulle der stå!!
Avatar billede psv Nybegynder
08. oktober 2002 - 13:49 #19
Øøøh - er du sikker på du kører Oracle??? :-)
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:51 #20
eagleeye >> det gør desværre ingen forskel - jeg få stadig samme fejl . Du kan også se i fejlmeddelelsen at to_number var skrevet med CAPS, og på det tidspunkt skrev jeg med småt

kbb2 >> som sagt er det et program hvor jeg bare skal definere udtrækkende af databasen - dvs. jeg har ingen anelse om det er ODBC, ADO eller SQLNET/NET8... :o(
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:52 #21
det har jeg fået af vide det er - har du da andre forslag hvis det viser sig det ikke er en orakel database?

(i fejlmeddelelsen står der ORA-00904 - det kunne tyde på oracle)
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:53 #22
to_char
to_number
...er der andre der kunne omdanne til tal-typen?
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 13:55 #23
Fejlen er en ORA fejl dvs. den er genereret af Oracle.. Noget siger mig at du skal gå dit setup igennem. Jeg menner ikke Oracle, men sikrer dig at du rent faktisk også kører det rigtig script.

Du må fx IKKE anvende danske bogstaver som  Æ, Ø Å

Prøv et step af gangen!

Fx:
SELECT
Sagsnummer, Sagsnavn, Kundenummer, Navn1, Sælger, Ansvarlig
FROM
sagshoved

Virker dette, så prøv det næste step og se hvor fejlen opstår!
Avatar billede psv Nybegynder
08. oktober 2002 - 13:56 #24
Det er ikke det fejlmeddelelsen går på... De siger Invalid column...

Det lugter af at der er en tredjeparts-fortolker imellem som spoofer dit udtryk. to_number er standard Oracle´... Og virker fjong her...
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:57 #25
..men det hele virker jo - det eneste der ikek virker er sorteringen. Den sorterer efter typen String(hvilket den jo også skal når kolonnen er af typen string) - jeg ville bare gerne have sorteringen til at blive i nummerorden - dvs. som om at kolonnen var af typen integer..
Avatar billede psv Nybegynder
08. oktober 2002 - 13:59 #26
det hele virker jo ikke... Det er standard SQL og bliver tilsyneladende ødelagt på vej til Oracle...!
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 13:59 #27
Tja hvis det virker med ÆØÅ i dine sqlscripts så er der noget der tyder på at din SQL sætning bliver fortolket. Hvilket program er det du bruger til at definere dine udtræks??
Avatar billede monstermand Nybegynder
08. oktober 2002 - 13:59 #28
psv >> det er jeg også bange for - også i og med at to_char virker!!

..så virker det jo underligt at to_number ikke virker(!) Den opfatter jo to_number som værende en kolonne..og ikke en parameter som den jo er..
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 14:00 #29
to_number og to_char er funktioner!
Avatar billede monstermand Nybegynder
08. oktober 2002 - 14:01 #30
undskyld...funiktioner - jeg er ikke så stærk i de begreber der :o)
Avatar billede eagleeye Praktikant
08. oktober 2002 - 14:01 #31
Er du sikker på der ikke er tekst i en af felterne i kolonnen for den skriver TO_NUMBER_ILLEGAL
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 14:02 #32
Hvis der er tekst i kolonnen giver den fejlen ORA-01722 som er invalid number!

Monstermand.. Hvad hedder det program/udviklingsværktøj du brugeR??
Avatar billede monstermand Nybegynder
08. oktober 2002 - 14:03 #33
eagleeye >> nej det er jeg ikke sikker på! Jeg har fået fortalt at HELE kolonnen kun skulle indeholde tal - men det kan jo være at der ligger nogle bogstaver gemt et sted således at det ikke kan lade sig gøre at bruge to_number...synes du fejlmeddelelsen tyder på det?
Avatar billede monstermand Nybegynder
08. oktober 2002 - 14:04 #34
kbb2 >> maconomy
Avatar billede ehf Nybegynder
08. oktober 2002 - 14:07 #35
monstermand >> Check lige at kolonnen kun indeholder tal.
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 14:08 #36
Så er der noget der siger mig at din SQL sætning bliver "behandlet" inden den ryger videre til Oracle. Ring til Maconomys hotline, der er sikkert et snedigt sted du kan angive at to_number rent fatisk er et en gyldig funktion!
Avatar billede kbb2 Nybegynder
08. oktober 2002 - 14:08 #37
jamen! tjek lige min kommentar ovenfor! Indeholder kolonnen andet en tal får man fejlen ORA-01722
Avatar billede monstermand Nybegynder
08. oktober 2002 - 14:10 #38
..og fejlmeddelelsen hedder jo ORA-00904
Avatar billede monstermand Nybegynder
08. oktober 2002 - 14:14 #39
jeg tror konklusionen foreløbigt må være at der er tredjeparts-programmer indblandet. Jeg vil forhøre mig hos maconomy - for de nysgerrige vender jeg tilbage når der er nyt i sagen..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester