Page 1 of 1
casting σε sql server 2005
Posted: Thu Oct 04, 2007 1:49 pm
by Swtos
Καλησπέρα!
Έχω ένα πρόβλημα με τη μετατροπή ακεραίων σε δεκαδικούς αριθμούς. Χρησιμοποιώ τις ενολές CAST & CONVERT αλλα τιποτα!
π.χ το CAST(5/6 AS DECIMAL) εχει αποτελεσμα 0. Δοκιμασα αντι για decimal και τα float & real αλλα παλι τπτ. Φαντάζομαι θα είναι κατι απλό αλλα προς το παρον δεν εχω βρει λύση...εχει κανεις καμια ιδέα? Ευχαριστω!

Posted: Thu Oct 04, 2007 2:26 pm
by P3
Posted: Thu Oct 04, 2007 2:29 pm
by nap
Από τη στιγμή που διαιρείς int / int, το αποτέλεσμα θα είναι int.
Χρειάζεσαι κάτι της μορφής
Code: Select all
CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)
Posted: Fri Oct 05, 2007 12:25 am
by Swtos
nap wrote:Από τη στιγμή που διαιρείς int / int, το αποτέλεσμα θα είναι int.
Χρειάζεσαι κάτι της μορφής
Code: Select all
CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)
Το εχω δοκιμασει και αυτο, ακολουθώντας αυτα που λεει και το λινκ που εδωσε ο Ρ3...
Αυτό που δεν καταλαβαίνω είναι το εξής: Όταν κανω:
Code: Select all
print CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)
εκτυπώνει κανονικά 0.83333...
Όταν όμως κανω, στα πλαίσια ενος UPDATE:
Code: Select all
SET rc = CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)
όπου rc είναι η στήλη ενός πίνακα, δηλωμένη ως DECIMAL τυπώνει 1, στρογγυλοποιεί δλδ το 0.83333 προς τα πανω...
Anyway, ευχαριστώ για τη βοηθεια

Posted: Fri Oct 05, 2007 9:12 am
by Sreak
Swtos wrote:
Όταν όμως κανω, στα πλαίσια ενος UPDATE:
Code: Select all
SET rc = CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)
όπου rc είναι η στήλη ενός πίνακα, δηλωμένη ως DECIMAL τυπώνει 1, στρογγυλοποιεί δλδ το 0.83333 προς τα πανω...
Anyway, ευχαριστώ για τη βοηθεια

SET rc = CAST( (CAST(5 AS DECIMAL) / CAST(6 AS DECIMAL)) AS DECIMAL)
Posted: Fri Oct 05, 2007 7:50 pm
by Swtos
Δεν έπαιξε ούτε με αυτό που γραφει ο ο Sreak...
Τελικά αλλαξα τη στήλη rc από DECIMAL σε FLOAT και όλα τα σχετικά καλουπώματα που γραφτηκαν παραπάνω και έπαιξε...ειλικρινα δεν μπορω να καταλαβω τι ρολο παιζει ο τύπος decimal...
Ευχαριστω για την ανταποκριση
