Hallo

Welkom, Gast. Alsjeblieft inloggen of registreren.

Recent

492 gasten, 0 leden

Welkom, Gast. Alsjeblieft inloggen of registreren.

27 april 2024, 23:25:28

Login met gebruikersnaam, wachtwoord en sessielengte

Nieuws

Welkom op het vernieuwde NL Computer Forum!

Auteur Topic: SQLserver convert getal  (gelezen 21583 keer)

0 leden en 1 gast bekijken dit topic.

Offline NLCOMP

  • Forumheld
  • *****
  • Berichten: 14.666
    • NL Computer Forum
SQLserver convert getal
« Gepost op: 9 november 2009, 19:19:05 »
Bericht 1 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:25-11-2004
 Aan:AllMsgID:1468.1
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi,

Ik moet regelmatig een nul op de 5e positie uit een getal
trimmen, wat is de beste (en veiligste) manier hiervoor

de getallen zijn nu type float en moeten dat voor compability ook blijven
ik ben wat begonnen maar denk dat alles eerst naar char moet en dan terug

het probleem komt voort uit het feit dat je in Access (dus ook in een adp) van een
float/double maar 11 posities kan lezen daarna wordt het wetenschappelijke notatie
dus zie je dingen als 1,74000000008E+11, de overbodige 0 eruit dan is alles opgelost

ik heb ook overwogen een ander datatype te nemen (decimal) maar dan moet er voor de
paar keer dat dit voorkomt heel veel aangepast worden, het aanleverende programma is
van derden en wordt hiervoor niet aangepast

voor en na het weghalen van 0 op 5e positie :
174000000441
174000003585

17400000441
17400003585

ik had zelf al wat update instrukties gemaakt maar daar twijfel ik teveel aan

bvb mijn dank voor het meedenken

Groetjes --John



Bericht 2 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:25-11-2004
 Aan:John Kopmels (Sysop)MsgID:1468.2
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi John,

Dit vind ik wel een heel vreemd verzoek. Als je de vijfde positie uit een getal verwijderd, dan verander je toch de waarde?

Ik kan me dit wl voorstellen bij een code, maar dan snap ik weer niet waarom het type float moet zijn. Dan ligt bigint (de getallen zijn te groot voor int) of (nog beter) char volgens mij meer voor de hand.

Maar goed - de volgende "simpele" formule verwijdert het vijfde getal bij de door jou gegeven voorbeelden. Let wel: als het ingevoerde getal langer of korter is, wordt niet meer het vijfde getal verwijderd. In feite wordt namelijk juist het achtste getal van rechts verwijderd.

declare @a float
set @a = 123405678901
--set @a = 174000000441
--set @a = 174000003585
select (cast(@a as bigint) / 100000000) * 10000000 + cast(@a as bigint) % 10000000

(Dit geeft een resultaat als integer. Als dit in een float kolom of variabele wordt gezet volgt impliciete conversie. Expliciete conversie kan ook:

select cast((cast(@a as bigint) / 100000000) * 10000000 + cast(@a as bigint) % 10000000 as float)

Groetjes, Hugo


Bericht 3 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:26-11-2004
 Aan:Hugo KornelisMsgID:1468.3
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi Hugo,

> Dit vind ik wel een heel vreemd verzoek.
Als je de vijfde positie uit een getal verwijderd, dan verander je toch de waarde?

Nee dat niet, dit is weer zo'n geval van 2 kolommen in n waarde gestopt :-(
4 pos Gemeente code + 8 pos uniek nummer samen in n kolom, de 8 posities
worden achter de Gemeentecode geplakt, uitgevuld met voorloopnullen tot 12.

De 8 posities worden nooit gebruikt dus kan je er makkelijk ntje missen.
Alleen bij teruglevering moet ik 'm er weer tussen plaatsen.


> Ik kan me dit wl voorstellen bij een code, maar dan snap ik weer niet
waarom het type float moet zijn. Dan ligt bigint (de getallen zijn te
groot voor int) of (nog beter) char volgens mij meer voor de hand.

Ik ben het er ook niet mee eens (samen met nog vele ander data types) maar een
groot aantal is nu eenmaal voorgeschreven en we hebben te maken met een partij
die oa de conversie software levert, en ben al gestopt met het zeuren erover.

> de volgende formule verwijdert het vijfde getal bij de door jou gegeven voorbeelden.
Let wel: als het ingevoerde getal langer of korter is, wordt niet meer het vijfde
getal verwijderd. In feite wordt namelijk juist het achtste getal van rechts verwijderd.

> select (cast(@a as bigint) / 100000000) * 10000000 + cast(@a as bigint) % 10000000
Dit geeft een resultaat als integer.
Als dit in een float kolom of variabele wordt gezet volgt impliciete conversie.
Expliciete conversie kan ook:
select cast((cast(@a as bigint) / 100000000) * 10000000 + cast(@a as bigint) % 10000000 as float)


Mooie oplossing ! Dat ik daar nou zelf niet opkwam :-)

wederom heel erg bedankt !

Groetjes --John



Bericht 4 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:27-11-2004
 Aan:John Kopmels (Sysop)MsgID:1468.4
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi John,

> dit is weer zo'n geval van 2 kolommen in n waarde gestopt :-(
> 4 pos Gemeente code + 8 pos uniek nummer samen in n kolom, de 8 posities
> worden achter de Gemeentecode geplakt, uitgevuld met voorloopnullen tot 12.

(...)

> Ik ben het er ook niet mee eens (samen met nog vele ander data types) maar
> een groot aantal is nu eenmaal voorgeschreven en we hebben te maken met een
> partij die oa de conversie software levert, en ben al gestopt met het
> zeuren erover.

Alleen is dit geen groot aantal, dit is gewoon een char(12) veld waar toevallig alleen de tekens '0' t/m '9' in voorkomen. Getallen zijn om mee te rekenen; ik mag hopen dat jij niet van plan bent gemeentecodes bij elkaar op te gaan tellen :-)

Als ik jou was, dan zou ik dit intern opslaan als CHAR(12) en alleen bij im- en export converteren naar welk belachelijk formaat de aanleverende c.q. afnemende partij maar wil.

Groetjes, Hugo


Bericht 5 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:28-11-2004
 Aan:Hugo KornelisMsgID:1468.5
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi Hugo,

> Alleen is dit geen groot aantal, dit is gewoon een char(12)
waar toevallig alleen de tekens '0' t/m '9' in voorkomen.

leesfout? 'met een groot *aantal datatypes* ben ik het ook niet eens'

> Als ik jou was, dan zou ik dit intern opslaan als CHAR(12)
en alleen bij im- en export converteren naar welk belachelijk
formaat de aanleverende c.q. afnemende partij maar wil.

Direkt na jou bericht ben ik *nog een keer* gaan overleggen met dit
keer enig resultaat, ik kan nu bij het inlezen een BigInt kiezen
zodat met weinig aanpassing voor iedereen nu alles naar behoren
werkt, en in elk geval beter dan een getal met drijvende komma...

Het kan dat ik het me verbeeld maar het lijkt ook sneller te werken?

Een char type wil men niet aan, dat zou te traag werken bij verwerken
van data bij conversie...? (wel opgemerkt dat het dll's in C++ zijn).


Groetjes --John



Bericht 6 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:Hugo KornelisDatum:28-11-2004
 Aan:John Kopmels (Sysop)MsgID:1468.6
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi John,

(knipperdeknip)

> Een char type wil men niet aan, dat zou te traag werken bij verwerken
> van data bij conversie...? (wel opgemerkt dat het dll's in C++ zijn).

En die "men", dat zijn dan zeker mensen in management die een beginnerboek over databases hebben gelezen en nu denken dat ze er verstand van hebben?

Enfin, het zal wel geen zin hebben om te vragen naar de uitgebreide testen waar dat snelheidsverschil in is aangetoond....

(zucht)

Groetjes, Hugo


Bericht 7 van 7

NL Computer Forum ~ SQL & Programmeren
 Van:John Kopmels (Sysop)Datum:29-11-2004
 Aan:Hugo KornelisMsgID:1468.7
 Onderwerp:SQLserver convert getalForum:ws-nlcomputer
Hoi Hugo

>> Een char type wil men niet aan, dat zou te traag werken bij verwerken
van data bij conversie...? (wel opgemerkt dat het dll's in C++ zijn).

> En die "men", dat zijn dan zeker mensen in management die een beginnerboek
over databases hebben gelezen en nu denken dat ze er verstand van hebben?

Het vreemde is dat er bij dat bedrijf juist erg capabele mensen werken maar:

1) hebben het veel te druk en vermijden daarom het liefst aanpassingen :-(

2) hebben te maken met veel aanverwante software die dan aangepast moet worden
zoals gemeentes en taxatie buro's met allemaal weer hun eigen belangen.

ik denk dat ze daarom van alles roepen om er vanaf te zijn ...?

Bovendien staat het als numeriek voorgeschreven door de Waarderingskamer
het waarom (ook bij andere voorgeschreven zaken) ontgaat me volledig !

Groetjes --John