Mam tabelę MySQL z kolumnami {{ X0}} typ, np DECIMAL(20,4). Chcę zmniejszyć precyzję dla tej kolumny na DECIMAL(10,2). Czy jest łatwy sposób sprawdzenia, czy nie spowoduje, że nie będzie to spowodować żadnej utraty danych (tj. Wszystkie istniejące wartości znajdują się w precyzji)?

1
planetp 26 czerwiec 2020, 17:06

2 odpowiedzi

Wyjmujesz miejsca "Mantissa". Nowy typ nie będzie mógł przechowywać wartości poza 99999999.99.

Dlatego jest bardzo łatwy w celu weryfikacji, czy będziesz tracić dane. Sprawdź, czy jakakolwiek wartość przekracza ten limit przy użyciu:

select * from my_table where my_column > 99999999.99

Edytuj dla miejsc dziesiętnych:

W przypadku 2 miejsc dziesiętnych na końcu możesz sprawdzić za pomocą:

select * 
from my_table
where round(my_column * 100) <> my_column * 100

Lub:

select
from my_table
where right(format(my_column, 4), 2) <> '00'
2
The Impaler 26 czerwiec 2020, 14:17

Podejście opisane przez @Theimpaler jest dźwięk, o ile nie można zmienić danych między czasem przebiegłym tym zapytaniem, a czas na przedefiniowanie pola. Jeśli istnieje możliwość zmiany danych w środku procesu, musisz zrobić więcej.

Możliwe podejście:

0
Chris Johnson 26 czerwiec 2020, 23:07