Avatar billede ktp Nybegynder
25. april 2001 - 15:31 Der er 17 kommentarer og
1 løsning

Tusind Separator

Hvordan kan der vises tusind separator i sin stored procedure ?
Eksempel:
  SELECT
  ID, Dato,
  SUM(IndvKg) AS Kg
  FROM tblTable
  GROUP BY ID, Dato
  ORDER BY Dato

Kg = 1000

Jeg vil gerne have Kg = 1.000

Er der nogen der kan hjælpe ?
Avatar billede slash Nybegynder
25. april 2001 - 15:38 #1
dette et opkast:

declare @kg int
select @kg = 1000/1000
select convert(varchar,@kg) + \'.\'+ right(1000,3)
print @kg

prøv at køre den i query analyzeren.... den retunerer 1.000!
Avatar billede slash Nybegynder
25. april 2001 - 15:38 #2
vil jeg mene - fik den ikke testen inden jeg postede den!
Avatar billede ldanielsen Nybegynder
25. april 2001 - 22:42 #3
Hvorfor skal de \"vises\" i en sp?

Det er vel kun brugerne der skal se dem?

Jeg vil råde dig til at skrive en funktion i forbindelse med din brugerflade, der \"formaterer\" tallet som du vil have det til at se ud.

Eks. i VBScript:

function formatTal(iTal)
  formatTal = Left(formatnumber(iTal),Len(cstr(formatnumber(iTal)))-3)
end function
Avatar billede ktp Nybegynder
26. april 2001 - 07:51 #4
Hej Slash
Din ide er faktisk god nok, men problemmet er bare at tallet også kan være 10000000 som gerne skal formateres som 10.000.000 man kan evt. også have decimaler. Hvordan klarer man den.
Avatar billede ktp Nybegynder
26. april 2001 - 07:53 #5
Hej ldanielsen
Den har jeg tænkt på, men jeg kan ikke bruge det i denne forbindelse, hvor den skal indgå i en ComboBox i Access.
Avatar billede ldanielsen Nybegynder
26. april 2001 - 08:58 #6
OK, Jeg kender ikke access så godt, men du har sandsynligvis ret.

SELECT
ID, Dato,
CONVERT(varchar,FLOOR(SUM(IndvKg)/1000)) + \'.\'+ RIGHT(CONVERT(varchar, SUM(IndvKg)),3) AS Kg
FROM tblTable
GROUP BY ID, Dato
ORDER BY Dato

Skulle gøre det (ikke testet), det er en omskrivning af slash\'s svar
Avatar billede ktp Nybegynder
26. april 2001 - 10:08 #7
Hej ldanielsen
Din kode virker fint, hvis tallet er < 1.000.000, hvad nu hvis det er størrer ?.
Hvad nu hvis jeg har 2 decimaler på det ?.
Tallet kan på et felt være et heltal og på et andet et decimaltal.
Avatar billede ldanielsen Nybegynder
26. april 2001 - 12:13 #8
Den er bare hård!! Men jeg prøver!
Avatar billede ldanielsen Nybegynder
26. april 2001 - 12:14 #9
Er der et max antal decimaler, og et max tal i det hele taget?
Avatar billede ktp Nybegynder
26. april 2001 - 12:47 #10
Det er nok bedst at dele den i 2 sp.
En med decimaler og en uden.
Max antal decimaler 2.
Max heltal 999.999.999.
Avatar billede ldanielsen Nybegynder
26. april 2001 - 13:16 #11
SELECT
ID, Dato,

LTRIM(REPLACE(
LEFT(STR(SUM(IndvKg),20,2),3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),6,3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),9,3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),12,3) + \".\" +
RIGHT(STR(SUM(IndvKg),20,2),6)
,\" .\",\"\")) AS Kg

FROM tblTable
GROUP BY ID, Dato
ORDER BY Dato

Virker hvis SUM(IndvKg) er float, og ikke \"alt for stor\".
Afrunder til 2 decimaler
Avatar billede ldanielsen Nybegynder
26. april 2001 - 13:16 #12
Havde ikke set dit svar, men den skulle være OK
Avatar billede ldanielsen Nybegynder
26. april 2001 - 13:18 #13
Min server er ikke dansk, så den bruger . i stedet for komma. Det kan løses
Avatar billede ktp Nybegynder
26. april 2001 - 18:47 #14
Jeg prøver den i morgen når jeg kommer på arbejde.
Min sever er også engelsk, men Access formatere automatisk . til ,
Virker den for du de 500 point.
Avatar billede ldanielsen Nybegynder
26. april 2001 - 22:47 #15
LTRIM(REPLACE(
LEFT(STR(SUM(IndvKg),20,2),3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),6,3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),9,3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),20,2),12,3) + \".\" +
RIGHT(REPLACE(STR(SUM(IndvKg),20,2),\".\",\",\"),6)
,\" .\",\"\")) AS Kg

- skulle ordne kommaet
Avatar billede ktp Nybegynder
27. april 2001 - 08:45 #16
Den virker - Tak for hjælpen
Mvh. KTP
Avatar billede ldanielsen Nybegynder
27. april 2001 - 08:52 #17
Tusind tak!!

Lige to ting mere:

Hvis der ABSOLUT ikke findes større tal end 999.999.999,99, så:

LTRIM(REPLACE(
LEFT(STR(SUM(IndvKg),12,2),3) + \".\" +
SUBSTRING(STR(SUM(IndvKg),12,2),6,3) + \".\" +
RIGHT(REPLACE(STR(SUM(IndvKg),12,2),\".\",\",\"),6)
,\" .\",\"\")) AS Kg

Ikke nær så tung, og akkurat nok.

Og så vil jeg personligt undersøge muligheden for at løse problemet i Access, det ville altså være smartere.

Venlig Hilsen
Lars D
Avatar billede ktp Nybegynder
28. april 2001 - 09:50 #18
Jeg har faktisk lavet det i en kode i Access, men den er meget laaaaaaangsommere.
Da jeg er ved at omprogrammere alle vores databaser fra Access MDB til ADP er faktisk lige startet med at bruge SQL Server. Til gengæld har jeg mange års erfaring i brug af Access, jeg har faktisk fuldt den siden version 1.0.
Endnu engang - Tak for hjælpen.
Jeg vender sandsynligvis tilbage med nye spørgsmål.

Venlig hilsen
Kurt T.P.
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