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

 

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

Ανάλογη Function DAYS360 στο VS2008

Îåêßíçóå áðü ôï ìÝëïò Karist. Τελευταία δημοσίευση από το μέλος Markos στις 19-08-2009, 14:37. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-08-2009, 15:55 53088

    Ανάλογη Function DAYS360 στο VS2008

    Γεια σας,

    Θέμα 1ο

    στο Excel υπάρχει η Function  DAYS360 και υπολογίζει όλους τους μήνες του χρόνου με 30 ημέρες και η διαφορά αμεταξύ δυο ημερομηνιών βγαίνει με βάση το 30.

    Υπάρχει ανάλογη μέθοδος στο VS2008 για να παιρνω την διαφορά από μια χρονική περίοδο;

    Πως αλλιώς θα μπορούσα να το κάνω;

    Θέμα 2ο

    Εχω τις παρακάτω ασφαλιστικές (οχήματα) χρονικές περιόδους  καταχωρημένες σε βάση του  SQL:

                              Εναρξη           Λήξη
    Εγγραφή Α)   30/06/2008   -  15/08/2009

    Εγγραφή Β)   01/08/2008   -   01/11/2008

    Εγγραφή Γ)    01/02/2009   -  01/04/2009

    Θέλω μέσα από την χρονική περίοδο 30/12/2008 - 30/06/2009 να πάρω:

    Α) όλες τις εγγραφές που η χρονική περίοδος περιέχει ημέρες από την χρονική περίοδο που έχω ζητήσει
        ( Εγγραφή Α & Γ )

    Β) τη διαφορά των ημερών     π.χ. για την εγγραφή Α)  365 ημέρες  & για την εγγραφή Β) 59 ημέρες

     

    Ευχαριστώ εκ των προτέρων

  •  17-08-2009, 17:33 53096 σε απάντηση της 53088

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Μάλλον θα χρειαστεί να το φτιάξεις μόνος σου. Και ύστερα ανέβασε τον κώδικα και για μας!! Απ' ό,τι διάβασα υπάρχουν δύο συστήματα: Το αμερικάνικο και το ευρωπαϊκό. Τις μεθόδους υπολογισμού θα τις βρεις εδώ, στην ενότητα Calendar Conventions. Πρόκειται για απόσπασμα από το βιβλίο "Introduction to financial technology", από το Google Books.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  17-08-2009, 18:13 53098 σε απάντηση της 53088

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Δες εδώ ένα παράδειγμα για να πάρεις  μια ιδέα. 
    τσέκαρε το. Μην το χρησιμοποιείσεις αυτούσιο.

    Manos
  •  19-08-2009, 09:10 53133 σε απάντηση της 53098

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Ευχαριστώ πολύ για το ενδιαφέρον και τι απαντησεις σας, εχετε καποια ιδεα για το 2ο Θέμα;

    Ευχαριστώ πολύ

  •  19-08-2009, 11:00 53135 σε απάντηση της 53133

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Η αλήθεια είναι ότι με το πρώτο ζήτημα, ξεχάσαμε το δεύτερο!! Νομίζω ότι η λύση δεν πρέπει να είναι και τόσο δύσκολη, από τη στιγμή μάλιστα που η ημερομηνία λήξης του συμβολαίου ΔΕΝ είναι ανοικτή (nullable). Αν κατάλαβα καλά, θέλεις να βρεις εκείνα τα συμβόλαια που ήταν ενεργά για ένα εύρος ημερομηνιών (@fromDate - @toDate). Αν θεωρήσουμε, λοιπόν, ότι τα αντίστοιχα πεδία ημερομηνιών στη βάση είναι ContractStartDate (ημ/νία έναρξης συμβολαίου) και ContractEndDate (ημ/νία λήξης συμβολαίου), αν το σκέφτομαι σωστά, το συμβόλαιο είναι σε ισχύ όταν το ContractStartDate είναι μικρότερο ή ίσο από τη μέγιστη ημ/νία του διαστήματος (@toDate) ή όταν το ContractEndDate είναι μεγαλύτερο ή ίσο από την ελάχιστη ημερομηνία του διαστήματος (@fromDate). Δηλαδή, το query σου πρέπει να είναι κάπως έτσι:

    Select [Τα πεδία που θέλεις] From [Πίνακας]
    Where
    ContractStartDate <= @toDate or
    ContractEndDate >= @fromDate

    Δοκίμασέ το και πες μας τα αποτελέσματα...


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  19-08-2009, 12:44 53141 σε απάντηση της 53135

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Markos σ' ευχαριστώ πολυ για την απαντηση σου, το δοκιμασα και "παιζει" με την διαφορά ότι άλλαξα το   OR   σε  AND.

    Μου βγάζει όλες τις εγγραφές που η ημερομηνια έναρξης ή λήξης είναι μέσα στα χρονικά όρια που του δίνω.

    Απ΄ οτι καταλαβαίνω, αν θέλω να παρω τις ημέρες που προκυπτουν στο χρονικό διαστημα που ζητάω, θα πρέπει να το κάνω με κωδικα.

    (  περίπτωση:  Β) τη διαφορά των ημερών     π.χ. για την εγγραφή Α)  365 ημέρες  &  για την εγγραφή Β) 59 ημέρες  )

    Επίσης, γνωρίζει κάποιος, αν οι ασφαλιστικές εταιρείες ( οχημάτων ) υπολογίζουν το έτος με 360 ημέρες και όχι με 365;

     

     

  •  19-08-2009, 14:37 53143 σε απάντηση της 53141

    Απ: Ανάλογη Function DAYS360 στο VS2008

    Έχεις δίκιο... εν μέρει. Η απάντησή μου ήταν λίγο επιπόλαια. Για παράδειγμα, όπως διατύπωσα τη συνθήκη αρχικά, στο σενάριο:

    ContractStartDate < ContractEndDate < @fromDate <= @toDate, η εγγραφή θα εμφανιστεί ενώ κανονικά πρέπει ν' απορριφθεί.

    Μερικές φορές αποφεύγει κανείς τα προβλήματα με την άμεση προσέγγιση, όσο κι αν αυτή δεν είναι η πλέον "εκλεπτυσμένη". Συνεπώς, το πιο αξιόπιστο είναι το:

    @fromDate <= ContractStartDate <= @toDate

    OR

    @fromDate <= ContractEndDate <= @toDate

    OR

    ContractStartDate < (@fromDate <= @toDate) < ContractEndDate => ContractStartDate < @toDate < ContractEndDate

     

    Δηλαδή, το query πρέπει να γίνει:

    (ContractStartDate between @fromDate and @toDate)

    OR

    (ContractEndDate between @fromDate and @toDate)

    OR

    (@toDate between ContractStartDate and ContractEndDate) (εντάξει, παίζει και η ισότητα...)

    Αν κάποιο μέλος διαπιστώσει ότι υπάρχει και κάποια περίπτωση(-εις) που μου διαφεύγει(-ουν), παρακαλώ ας κάνει post.

    Τέλος, όσον αφορά στο δεύτερο ερώτημα, δεν έχω καταλάβει από ποια ημερομηνία αφαιρείται η ContractStartDate. Αν η διαφορά εξαρτάται και από τα input dates (@fromDate, @toDate), τότε θα πρέπει να φτιάξεις function που σου επιστρέφει την ημερομηνία από την οποία θα αφαιρέσεις την ContractStartDate και την οποία θα πρέπει να συμπεριλάβεις στη συνάρτηση DateDiff στο αρχικό select statement.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems