Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy należy wybrać typy danych MONEY lub DECIMAL(x,y) w SQL Server?

Nigdy, przenigdy nie powinieneś używać pieniędzy. Nie jest precyzyjny i jest czystym śmieciem; zawsze używaj dziesiętnych/numerycznych.

Uruchom to, aby zobaczyć, co mam na myśli:

DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)

    SELECT
    @mon1 = 100, @mon2 = 339, @mon3 = 10000,
    @num1 = 100, @num2 = 339, @num3 = 10000

    SET @mon4 = @mon1/@mon2*@mon3
    SET @num4 = @num1/@num2*@num3

    SELECT @mon4 AS moneyresult,
    @num4 AS numericresult

Wyjście:2949.0000 2949.8525

Do niektórych osób, które powiedziały, że nie dzielisz pieniędzy na pieniądze:

Oto jedno z moich zapytań do obliczenia korelacji, a zamiana tego na pieniądze daje błędne wyniki.

select t1.index_id,t2.index_id,(avg(t1.monret*t2.monret)
    -(avg(t1.monret) * avg(t2.monret)))
            /((sqrt(avg(square(t1.monret)) - square(avg(t1.monret))))
            *(sqrt(avg(square(t2.monret)) - square(avg(t2.monret))))),
current_timestamp,@MaxDate
            from Table1 t1  join Table1 t2  on t1.Date = traDate
            group by t1.index_id,t2.index_id


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server odpowiednik typu danych wyliczenia MySQL?

  2. Jak uzyskać aktualną datę w SQL Server

  3. Zaktualizuj wiersz

  4. Jak wygenerować instrukcję Drop Table dla wszystkich tabel w bazie danych — SQL Server / T-SQL Tutorial, część 48

  5. Uzyskaj 1 górny wiersz z każdej grupy