Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Διαφορετικό αποτέλεσμα τύπου σε SQL και Excel

Îåêßíçóå áðü ôï ìÝëïò neoklis. Τελευταία δημοσίευση από το μέλος neoklis στις 10-06-2009, 15:05. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-06-2009, 12:47 51499

    Διαφορετικό αποτέλεσμα τύπου σε SQL και Excel

    Ο τύπος 2.68 + 1.87 + (1 * (4.58 - 2.78 + 3.79)) + ((1 * 3) / 6) + 0 στο excel βγάζει αποτέλεσμα 10,64. Στον SQL βγάζει 10,14.

     

    declare @Tst_Big decimal(10,2)

    set @Tst_big=2.68 + 1.87 + (1 * (4.58 - 2.78 + 3.79)) + ((1 * 3) / 6) + 0

    print @tst_big

     

    Για τον ίδιο ακριβώς δηλαδή τύπο παίρνω διαφορετικό αποτέλεσμα στο excel και διαφορετικό στον SQL. Μπορεί κάποιος να μου εξηγήσει τι συμβαίνει..;

     


    Dionisis
  •  10-06-2009, 13:05 51500 σε απάντηση της 51499

    Απ: Διαφορετικό αποτέλεσμα τύπου σε SQL και Excel

    Με βάση την πράξη που παρέθεσες το ερώτημα αναλύεται στο εξής:

    Α)2.68 + 1.87 + (1 * (4.58 - 2.78 + 3.79))=10.14

    Β) ((1 * 3) / 6) + 0=0,5

    Γ)Α+Β=10,64

     

    Δεν θυμάμαι καμία ιδιοτροπία του SQL που να απέτρεπε την εκτέλεση του Β,μάλλον πρέπει να ξανακοιτάξεις τις εκφράσεις σου πρώτα.  

  •  10-06-2009, 13:24 51502 σε απάντηση της 51499

    Απ: Διαφορετικό αποτέλεσμα τύπου σε SQL και Excel

    Δεν είναι θέμα παραξενιάς, απλά .... το 1*3/6 είναι διαίρεση ακεραίων με αποτέλεσμα 0.5 δηλαδή 0.

    Στο SQL statement που έγραψες ορίζεις μόνο το αποτέλεσμα ως decimal, όχι τους ίδιους τους αριθμούς. Από τη στιγμή που ο SQL Server δεν ξέρει τί τύπου είναι αυτοί οι αριθμοί θα προσπαθήσει να τους μεταφράσει σε όποια μορφή μπορεί. Όσοι αριθμοί έχουν δεκαδικό προφανώς είναι κάποια μορφή float ή decimal. Όσοι αριθμοί δεν έχουν είναι integer. Γι αυτό και το 1*3/6 καταλήγει 0. Αν προσθέσεις όμως ένα .0 θα θεωρηθούν όλοι δεκαδικοί, π.χ. το 1.0*3/6, το 1*3.0/6 ή το 1*3/6.0 θα επιστρέψουν όλα 0.5

    Το ότι στο Excel υπάρχει μία συμπεριφορά και στον SQL άλλη δεν έχει καμμία απολύτως σημασία. Το Excel δεν είναι βάση δεδομένων, δεν έχει καν τύπους  και βασίζεται πάντα σε μετατροπές για να καταλάβει αν κάτι είναι κείμενο ή κάτι άλλο. Για το excel τα πάντα είναι ή κείμενο ή αριθμός, ακόμα και οι ημερομηνίες.

    Ο SQL Server όμως βασίζεται στους τύπους και πρέπει να μαντέψει τί τύπου είναι κάθε στοιχείο πριν το χρησιμοποιήσει.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-06-2009, 15:05 51509 σε απάντηση της 51502

    Απ: Διαφορετικό αποτέλεσμα τύπου σε SQL και Excel

    Ευχαριστώ και τους δυό σας για την βοήθεια σας..


    Dionisis
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems