Jak przechowywać wartości dziesiętne w SQL Server?


272

Próbuję ustalić dziesiętny typ danych kolumny w SQL Server. Muszę być w stanie przechowywać wartości takie jak 15,5, 26,9, 24,7, 9,8 itd

Przypisałem decimal(18, 0)do typu danych kolumny, ale nie pozwala mi to przechowywać tych wartości.

Jak to zrobić?

Odpowiedzi:


513

DECIMAL(18,0) pozwoli 0 cyfr po przecinku.

Użyj czegoś takiego, DECIMAL(18,4)co powinno wystarczyć!

To daje w sumie 18 cyfr , z czego 4 po przecinku (i 14 przed przecinkiem).


@marc_s, Czy mimo wszystko istnieje wartość „4.5”, gdzie typ danych kolumny jest dziesiętny (4,2)? Gdy wstawię wartość, zmienia się ona na „4.50”
Arun

1
@ArunkumarTK: decimal(4,2)dopuszcza 2 cyfry przed i 2 cyfry po przecinku. „4.5” można zapisać bez problemu - i liczbowo „4.5” i „4.50” są identyczne
marc_s

3
@ArunkumarTK: DLACZEGO powinny być inne? Oba mają „cztery i pół” - wartość JEST TO SAM . I NIE używaj a varchardo przechowywania wartości dziesiętnej !!
marc_s,

1
Wiem, że to stara dyskusja, ale nie byłoby to „4.05” i „4.5” w tym przypadku @ArunkumarTK.
Shelby115,

2
Tak, dlaczego 18 jest tak popularne (np. Domyślne (18,0)), gdy 18 i 19 używają 9 bajtów ?
xr280xr

136

Powinieneś użyć w następujący sposób:

DECIMAL(m,a)

m to liczba cyfr, które może zawierać dziesiętny.

a to maksymalna liczba cyfr, jaką możesz mieć po przecinku.

http://www.tsqltutorials.com/datatypes.php zawiera opisy wszystkich typów danych.


3
Zazwyczaj jest oznaczany jako DECIMAL (p, s), gdzie p oznacza precyzję (maksymalna dozwolona liczba w liczbie), a s oznacza skalę (maksymalna dozwolona liczba po przecinku).
RBT

Link nie działa
ibrahim mahrir

43

Ustawieniami Decimalsą jego dokładność i skala lub w normalnym języku, ile cyfr może mieć liczba i ile cyfr chcesz mieć po prawej stronie przecinka dziesiętnego.

Więc jeśli umieścisz PIw Decimal(18,0)będzie rejestrowane jako 3?

Jeśli umieścisz PIw Decimal(18,2)będzie rejestrowane jako 3.14?

Jeśli położy PIsię Decimal(18,10)być rejestrowane jako 3.1415926535.


35

Przez większość czasu używam dziesiętnych (9,2), które zajmują najmniej miejsca (5 bajtów) w formacie dziesiętnym sql.


Precyzja => Bajty pamięci

  • 1 - 9 => 5
  • 10–19 => 9
  • 20–28 => 13
  • 29–38 => 17

Może przechowywać od 0 do 9 999 999,99 (7 ​​cyfr w przód + 2 cyfry za przecinkiem = ogółem 9 cyfr), co jest wystarczająco duże dla większości wartości.


9

Możesz tego spróbować

decimal(18,1)

Długość liczb powinna wynosić całkowicie 18. Długość liczb po przecinku powinna wynosić tylko 1 i nie więcej.


6

W MySQL DB decimal(4,2)pozwala na wprowadzenie tylko 4 cyfr. Jak widzisz decimal(4,2), oznacza to, że możesz wprowadzić łącznie 4 cyfry, z których dwie cyfry mają być przechowywane po przecinku.

Tak więc, jeśli wpiszesz 100.0 w bazie danych MySQL, wyświetli się błąd typu „Wartość poza zakresem dla kolumny”.

Możesz więc wpisać tylko w tym zakresie: od 00.00 do 99,99.


2
Dlaczego jest to istotne, skoro pytanie jasno określa Microsoft SQL Server?
JCKödel,

3

Pozostałe odpowiedzi są prawidłowe. Zakładając, że twoje przykłady odzwierciedlają pełen zakres możliwości, czego potrzebujesz DECIMAL(3, 1). Lub DECIMAL(14, 1)pozwoli w sumie 14 cyfr. Twoim zadaniem jest zastanowienie się, co wystarczy.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.