Bill :Για δοκιμή έτρεξα το παρακάτω :
declare @x float
set @x = 150
select cast(@x as decimal(5,2))
δεν μου το έκανε 150.00
Είναι λογικό καθώς η cast δεν κάνει format, απλά μετατρέπει από τον ένα τύπο στον άλλο. Εφόσον μετατρέπεις αριθμό πάλι σε αριθμό ο τρόπος εμφάνισης εξαρτάται από τον client, είτε μιλάμε για το Management Studio, είτε για ένα SSIS script είτε για ADO.NET κώδικα. Για παράδειγμα, στο Management Studio σε μηχάνημα με αγγλικό UI βλέπω 150.00. Αν δούλευα με ADO.NET, ελληνικό Locale και αποθήκευα σε string, θα έβλεπα 150,00. Αν το έστελνα σε numeric πεδίο κάποιας άλλης βάσης, π.χ. Access, θα έβλεπα 150. Αλήθεια, πως κάνεις το export και σε τί μορφή?
Το function το οποίο μετατρέπει αριθμούς σε string στην T-SQL είναι το STR και δέχεται ως παραμέτρους τον συνολικό αριθμό ψηφίων και τα δεκαδικά. Η μετατροπή χρησιμοποιεί πάντα την τελεία ως δεκαδικό, οπότε ίσως να μην σου κάνει.
Για παράδειγμα, το παρακάτω query
declare @x float
set @x = 150
select str(@x,6,2)
select str(@x,5,2)
select str(@x,6,1)
select str(@x,6,0)
select str(@x,16,2)
θα βγάλει
150.00
150.0
150.0
150
150.00
Πρόσεξε και το padding με κενά που κάνει η str όταν δίνω μεγάλο αριθμό ψηφίων.
Γενικά η T-SQL είναι πολύ φτωχή όσον αφορά το formatting, γι αυτό και κατά κανόνα είναι προτιμότερο να το κάνεις στον client και όχι σε statements
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos