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ć?

Alex
źródło

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
źródło
@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.

DForck42
źródło
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.

Rubens Mariuzzo
źródło
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.

Hnin Htet Htet Aung
źródło
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.

Biddut
źródło
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.

Raja Gotowe
źródło
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.

Matthew Flaschen
źródło
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)
freya
źródło