Προς το περιεχόμενο

SQL και ημερομηνίες


de173

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους τους συμφορουμίτες!

 

Θα ήθελα να κάνω μία ερώτηση σχετική με μετατροπη ενός character πεδίου σε date.

Το πεδίο είναι της μορφής ΕΕΕΕΜΜΗΗ (char) και με μετατροπή

 

convert(date,[old_date],112) as [new_date]

 

μετατρέπω την ημερομηνία σε ΗΗ/ΜΜ/ΕΕΕΕ (date).

 

Το πρόβλημα εμφανίζεται οταν το πεδίο [old_date] είναι 00000000.

Το query βγάζει σφάλμα στην μετατροπή.

 

Υπάρχει τρόπος να μετατρέψω αυτήν την ημερομηνία (με τα μηδενικά) σε 00/00/0000;

 

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

Δημοσ.

Υπάρχει τρόπος να μετατρέψω αυτήν την ημερομηνία (με τα μηδενικά) σε 00/00/0000;

 

Όλες οι βάσεις δεδομένων έχουν ένα εύρος τιμών για την ημερομηνία. Δεν μπορείς να βάλεις ότι ημερομηνία θέλεις, εξού και το σφάλμα. Δες σε αυτή που χρησιμοποιείς τι ημερομηνίες μπορεί να δεχτεί.

 

Edit:

Αν χρησιμοποιείς mySQL δοκίμασε να κάνεις

SELECT FROM_DAYS(old_date);

μήπως σε αφήσει να το περάσεις έτσι.

Δημοσ.
Όλες οι βάσεις δεδομένων έχουν ένα εύρος τιμών για την ημερομηνία. Δεν μπορείς να βάλεις ότι ημερομηνία θέλεις, εξού και το σφάλμα. Δες σε αυτή που χρησιμοποιείς τι ημερομηνίες μπορεί να δεχτεί.

 

Από την στιγμή που το μετατρέπω σε date, δέχεται μόνο ημερομηνίες (π.χ. ΔΕΝ θα δεχτεί να μετατρέψει το string 20100230).

Υπάρχει τρόπος με κάποιο if μέσα στο select να μπορέσω να δώσω εγώ συγκεκριμένη ημερομηνία μόνο για τις μηδενικές; (δηλαδή το 00000000 να μετατραπεί σε 01/01/1900)

Δημοσ.
Από την στιγμή που το μετατρέπω σε date, δέχεται μόνο ημερομηνίες (π.χ. ΔΕΝ θα δεχτεί να μετατρέψει το string 20100230).

Υπάρχει τρόπος με κάποιο if μέσα στο select να μπορέσω να δώσω εγώ συγκεκριμένη ημερομηνία μόνο για τις μηδενικές; (δηλαδή το 00000000 να μετατραπεί σε 01/01/1900)

 

Δεν σε πρόλαβα, το έγραψα στο προηγούμενο.

Τι βάση χρησιμοποιείς;

Δημοσ.
Δεν σε πρόλαβα, το έγραψα στο προηγούμενο.

Τι βάση χρησιμοποιείς;

 

SQL και συγκεκριμένα 2008

Δημοσ.
SQL και συγκεκριμένα 2008

 

Δεν έχω το SQL-SERVER εγκατεστημένο εδώ.

Δοκίμασε να του βάλεις ένα if μετά το select και πριν την μετατροπή και αν είναι 0000 να το βάζει καρφωτά 1900/01/01 αλλιώς να κάνει την μετατροπή.

Δημοσ.

>Select convert(date,[old_date],112) as [new_date]
where isnull(old_date,00000000) <> '00000000'

??

Το old_date είναι varchar ή date; Tώρα κάνει το where σαν να είναι varchar και ίσως έχει θέμα άν είναι date. Δοκίμασε το.

 

Ή δεν ξέρω άν θές case. Tότε δοκίμασε κάτι τέτοιο

 

>Select case when old_date = '00000000' then '01/01/1900' else convert(date,[old_date],112) end as [new_date]

Δημοσ.
>Select convert(date,[old_date],112) as [new_date]
where isnull(old_date,00000000) <> '00000000'

??

Το old_date είναι varchar ή date; Tώρα κάνει το where σαν να είναι varchar και ίσως έχει θέμα άν είναι date. Δοκίμασε το.

 

Ή δεν ξέρω άν θές case. Tότε δοκίμασε κάτι τέτοιο

 

>Select case when old_date = '00000000' then '01/01/1900' else convert(date,[old_date],112) end as [new_date]

 

Δούλεψε το CASE τελικά! Σας ευχαριστώ!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...