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...

Ευχαριστω για την ανταποκριση :-)