webForumDet fria alternativet

Fält för vikt med decimal

Databaser & SQL

14 svar · 774 visningar · startad av brw

Medlem sedan juli 2000619 inlägg
Frågan#1

Jag undrar vad jag ska använda för fälttyp i SQL-server för att spara vikt i kg med en decimal. Till exempel 97,1 så att jag till exempel kan räkna ut månadens snittvikt etc. Annars hade jag bara kunna använda ett vanligt textfält men eftersom jag måste kunna räkna med det så bör jag väl ha en annan fälttyp?..

Det finns en dom heter decimal är det den jag ska använda?

Undrar även vilken fälttyp som ska användas i Accessdatabas för att kunna göra ovanstående?

Medlem sedan juni 200032 967 inlägg
#2

Decimal eller float.

I Access väljer du typen "Number" och ändrar fältlängden till "Double".

Flyttas från SQL.

Medlem sedan juli 2000619 inlägg
#3

Tackar så mycket!

:)

Medlem sedan sep. 200425 inlägg
#4

På tal om detta har jag ett liknande problem.
Då jag använder SQL-server 2000.

När jag sparar mitt värde via asp-sidan låt oss säga att mitt värde är 0,007 när jag sedan uppdaterar så blir nya värdet 0 eller 7 beroende på vilken datatyp jag använder.

Jag har testat: Real, decimal och float .

Skriver jag däremot 0.007 sparas värdet som 0,007 när sidan laddas om.

om jag i detta läge väljer att uppdatera datat igen utan ändra något så ändras 0,007 till 0 ..

Vad kan vara fel?

Medlem sedan juni 200032 967 inlägg
#5

Det beror lite på hur ASP-koden ser ut. När det handlar om decimaltal måste du alltid se till att det i SQL-frågan anges decimalpunkt, och inte komma. Använd alltså alltid replace() för att vara säker på det.

Medlem sedan sep. 200425 inlägg
#6

Tack!

Fungerar utmärkt nu :)

datatype: float och sen replace :e

Medlem sedan juni 20034 013 inlägg
#7

Vill du bara ha en decimal så passar det bättre med en heltalstyp (int) än float/double/decimal. Float-typerna är till för när du inte har exakta tal, men det har ju du. Du behöver ju bara lagra värdena i hekto i stället så får du ju heltal hela vägen vilket är mycket bättre. När du ska lagra dem tar du ju bara bort decimaltecknet och när du skriver ut på skärmen så sätter du dit det. Alla beräkningar och all lagring sker med heltal vilket tar mindre plats och är mycket snabbare, och dessutom exakt.

I och för sig lär det väl inte spela så stor roll i ditt fall, men heltal är ändå den bästa typen.

Medlem sedan dec. 200012 464 inlägg
#8

Decimal är en exakt datatyp.

Medlem sedan juni 20034 013 inlägg
#9

Jag är ju programmerare, så för mig finns ju bara heltal, flyttal och strängar. Jag tog för givet att de tal som inte var heltal i databaser lagrades som flyttal. Men hur lagras Decimal?

Medlem sedan dec. 200012 464 inlägg
#10

Det får varje DBMS bestämma, det är inget som specificeras i standarden. Om man skall hantera decimal på ett korrekt sätt så går det inte att använda float som lagringsformat.

Medlem sedan sep. 200425 inlägg
#11

Problem igen.

jag kör replace på , så det blir .
allt fungerar i min testmiljö där collation name är/var latin någonting.

I produktionsmiljön var collation name: swe_fin. nu är jag tillbaka på ruta 1. Alla , försvinner och blir heltal. x(

Hur kan jag lösa detta problem?

Medlem sedan juni 200032 967 inlägg
#12

Du ska alltid se till att ha samma collation i test- och produktionsmiljö.

Dessutom har jag aldrig varit med om decimalteckensproblem på det här sättet. Oberoende av collation skall du använda punkt som decimaltecken i dina SQL-frågor.

Kan du ge ett exempel på en SQL-fråga som fungerar i testmiljön, men som inte gör det i produktionsmiljön, samt bifoga felmeddelande?

Medlem sedan sep. 200425 inlägg
#13

Nu fungerar det inte i testmiljönheller då jag bytt collation till svensk finsk i den.

Inget felmeddelande. Den skriver bara över alla 1.0405 till 10405 när jag sparar.
Datatype är decimal. har även testat med float och real med samma resultat.

och alla , ersätts med . så inget kan bli fel där.

Medlem sedan juni 200032 967 inlägg
#14

Om du i SQL-frågan anger punkt som decimaltecken så ska det fungera.

Så: skriv ut och posta färdig SQL-fråga som resulterar i felaktigt data i ditt fält.

Medlem sedan sep. 200425 inlägg
#15

ytterligare ett inlägg om decimaler. Jag har en .txt fil som ser ut följande:

200501STO463208 I00142 0000000000272,410000000000086,41100070
Detta är en rad..

200501STO347509 I01652 0000000001211,200000000000291,36101137
200501STO347509 I01652 0000000001211,200000000000291,36101141
200501STO460507 V00124 0000000000107,180000000000035,21104519
200501STO356030 V00009 0000000001840,280000000000091,52106717

datum: 200501
region: sto
dxc nr: 463208
int nr: I00142
summa 1: 0000000000272,41
summa 2: 410000000000086,41
art nr: 100070

Summa 1 och 2 vill jag göra till decimal eller annan data type som går att räkna med.. men detta går inte när jag kör ett DTS paket och gör sum1&2 till decimal "error converting char to numeric"
det borde väl gå att importera summor med , eller?
Vet dock inte om jag gör fel eller vad det kan vara.

Någon som har lösningen på detta?

252 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)