2017-09-12 2 views
0

Ich möchte Werte aus meiner SQL-Anweisung runden, aber dynamisch.SQL: Dynamische Runde

ich tatsächlich vergessen, die offizielle Bezeichnung für diese, aber man könnte es verstehen, diese Erklärung mit:

129.12144214 --> 129 
0.000052142124 --> 0.0000521 
2.213131 --> 2.21 

Die Menge der Nicht-Null-Dezimalstellen, in diesem Fall ist natürlich 3.

Wie würde Kann ich das in SQL machen?

+0

alles ist möglich in SQL ^^ könnten Sie die Logik ein wenig erklären genauer? Warum erwartest du 129 und nicht 129.121? –

+0

Habe gerade einen Fehler in den Beispielen behoben ... Nun, ich möchte nur die drei ersten Werte ungleich Null und nichts dahinter. –

+0

Was ist das erwartete Ergebnis von 5001.123? Und von 0,01? –

Antwort

1

dieser Schritte sollten Sie die Ergebnisse, die Sie wünschen (zB 129,12144214):

  • die log10 erhalten: 2,11099836751079
  • schneiden Sie die Dezimalstellen:
  • Devide Ihre 129 ,. .. mit (10 ^): 1,29121442
  • Runde auf 2 Dezimalstellen: 1.29
  • Multipliziere mit (10 ^): 129

Die Idee ist, jeden Wert auf einen Wert zwischen 0 und 10, dann um auf zwei Dezimalstellen zu bringen und ihn dann zu seinem ursprünglichen „Bereich“ zu bringen.

In SQL ist es so etwas wie (ok, ich habe es in SQL Server durchgeführt, aber die Befehle gleich sein sollte):

DECLARE @x decimal(18,6); 
SET @x = 129.12144214 ; 

SELECT (ROUND(@x/POWER(10, FLOOR(LOG10(@x))), 2)) * POWER(10, FLOOR(LOG10(@x))) 
+1

sein Orakel: wählen (ROUND (0.000052142124/power (10, Stock (Protokoll (10,0.000052142124)))), 2)) * POWER (10, FLOOR (LOG (10,0,000052142124))) als Ergebnis von Dual – Moudiz