makaveli Δημοσ. 15 Απριλίου 2005 Δημοσ. 15 Απριλίου 2005 Καλημέρα! Έχω μία βάση στην οποία θέλω να αναζητήσω με query όλες τισ εγγραφές οι οποίες έγιναν μεταξύ 2 συγκεκριμένων ημερομηνιών! Μέχρι εδώ όλα είναι απλά και εύκολα! Όμως το πρόβλημα είναι ότι αυτός που σχεδίασε την εφαρμογή στην οοποία δουλεύω, όταν σχεδίασε την βάση την ημερομηνία την δήλωσε ως nvarchar και όχι ως date! Έτσι είναι αδύνατο να αναζητήσω με Criteria (<date) or (>date) κτλ! Και αυτό γιατι η βάση διαχειρίζεται πλέον την ημερομηνία ως string και συγκρίνει τισ εγγραφές ανάλογα με τον πρώτο αριθμό της ημερομηνίας και όπως καταλαβαίνετε το αποτέλεσμα είναι άσχετο! Το να αλλάξω το πεδίο από nvarchar σε date είναι αδύνατο γιατί απαιτεί σβήσιμο όλων των μέχρι τώρα εγγραφών αλλά επίσης χαλάει και λειτουργίες της εφαρμογής... Υπάρχει λοιπόν τρόπος να φτιάξω το συγκεκριμένο query αξιόπιστα χειριζόμενος με κάποιο τρόπο τις εγγραφές ως date? Υπάρχει μήπως καμία function Cdate που κατά την σύγκριση να μετατρέπει το string της βάσης σε Date? Βασικά είμαι σε αδιέξοδο! lol!
daidalus Δημοσ. 15 Απριλίου 2005 Δημοσ. 15 Απριλίου 2005 Αμαρτίες designers παιδεύουσι developers.. Τι βάση έχεις?
daidalus Δημοσ. 15 Απριλίου 2005 Δημοσ. 15 Απριλίου 2005 Για ρίξε μια ματιά εδώ http://msdn.microsoft.com/library/default.asp?url=/library/en-us/acdata/ac_8_con_03_7uzy.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_2f3o.asp Μπορείς να χρησιμοποιήσεις την εντολή CAST για μετατροπή τύπων.Να μετατρέψεις δηλαδή το nvarchar σε date και μετά να κάνεις την σύγκριση. Αν αυτό δεν δουλέψει όρισε μια UDF που θα λαμβάνει δύο ημερομηνίες και θα επιστρέφει π.χ -1 αν η 1η ειναι μεγαλύτερη της 2ης,0 αν είναι ίσες και 1 άν αν η 2η είναι μεγαλύτερη της 1ης.Μετά στο query σου κάνε χρήση αυτής της UDF για να φιλτράρεις τα αποτελέσματα.Αν μπερδεύεσαι όρισε περισσότερες UDF π.χ. μια για τις ημερες,μια για τους μηνες και μια για τα χρόνια. Πάντως ο δευτερος τρόπος δεν μου φαίνεται πολύ αποδοτικός. Αυτό που θα έκανα εγώ είναι να φέρω όλα τα αποτελέσματα στην μνήμη και να κάνω το φιλτράρισμα στον κωδικα και όχι στην βάση (χρήση RecordSet ή DataSet)
makaveli Δημοσ. 15 Απριλίου 2005 Μέλος Δημοσ. 15 Απριλίου 2005 Ευχαριστώ φίλε! τελικά έλυσα το πρόβλημα με φιλτράρισμα από τον κώδικα! Πήγα βέβαια μέσω Λαμίας και αυτό είναι βασικά που με εκνευρίζει αλλά τι να κάνουμε! Τουλάχιστον τρέχει! Thanx man!
sotospez Δημοσ. 29 Απριλίου 2005 Δημοσ. 29 Απριλίου 2005 ayto einai select kai pano se ayto allazo to type to CAST kai to CONVERT kanoyn peripoy tin idia doulia stin periptosi soy tin idia SELECT CONVERT(DATETIME ,ENTRYDATE) AS A1 , CAST( ENTRYDATE AS DATETIME ) AS A2, * FROM FFFF WHERE CONVERT(DATETIME ,ENTRYDATE) > '2005-01-01'
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.