Παράγοντας Ημερολόγιο με Transact SQL και PL/SQL

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Παράγοντας Ημερολόγιο με Transact SQL και PL/SQL

Δημοσίευση από cordis » 10 Μάιος 2005 18:35

Παράγοντας λίστα ημερομηνιών (Ημερολόγιο) από μία ημερομηνία έως μια άλλη με Transact SQL του SQL Server και της SyBase:

Κώδικας: Επιλογή όλων

SELECT convert(varchar, convert(datetime, '20050301', 112) - q.rownum + 1, 112) day_of
  FROM ( SELECT rownum=( SELECT COUNT(*) 
			  FROM sysusers
		          WHERE name <= T.name &#41;, name
	 FROM	  sysusers T  &#41; q
WHERE convert&#40;varchar, convert&#40;datetime, '20050301', 112&#41; - rownum + 1, 112&#41; >= '20050201'
order by day_of


Παράγοντας λίστα ημερομηνιών από μία ημερομηνία έως μια άλλη με PL/SQL της Oracle:

Κώδικας: Επιλογή όλων

        SELECT to_char&#40;to_date&#40;'2005-03-01', 'YYYY-MM-DD'&#41; - rownum + 1, 'YYYY-MM-DD'&#41; day_of
          FROM sys.user$
         WHERE to_char&#40;to_date&#40;'2005-03-01', 'YYYY-MM-DD'&#41; - rownum + 1, 'YYYY-MM-DD'&#41; >= '2005-02-01'
 
Και τα δύο παραδείγματα θα μας φέρουν όλες τις ημερομηνίες από τις 01/02/2005 έως τις 01/03/2005.

Το μόνο που πρέπει να προσέξουμε είναι το table που θα χρησιμοποιήσουμε να έχει τόσες εγγραφές σε πλήθος όσες και οι ημερομηνίες που θέλουμε να βγάλουμε ή ακόμα και περισσότερες, ποτέ όμως λιγότερες. Εγώ στο παράδειγμα χρησιμοποίησα κάποια system tables, το sysusers στην πρώτη περίπτωση και το sys.user$ στην δεύτερη.

Ακόμα στην περίπτωση της Transact SQL το table θα πρέπει να περιέχει και ένα μοναδικό varchar πεδίο για να μπορέσει να γίνει η σύγκριση και να παραχθεί ο επιθυμητός αύξων αριθμός.

Έχω δει πολλές υλοποιήσεις σε εφαρμογές που κάνουν loops ή cursors ή temp tables για να καταφέρουν κάτι τέτοιο.. ενώ στην πραγματικότητα δεν χρειάζεται... ;)
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27626
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Παράγοντας Ημερολόγιο με Transact SQL και PL/SQL

Δημοσίευση από cordis » 10 Οκτ 2005 15:18

και για να έχουμε κάθε λεπτό της ημέρας με ένα select στην PL/SQL

Κώδικας: Επιλογή όλων

SELECT to_char&#40;to_date&#40;'1899-12-31 23&#58;59', 'YYYY-MM-DD HH24&#58;MI'&#41; + &#40; rownum + 1&#41;/1440, 'HH24&#58;MI'&#41; time_of,
 FROM Table_with_1440_rows_or_more
 WHERE to_char&#40;to_date&#40;'1899-12-31 23&#58;59', 'YYYY-MM-DD HH24&#58;MI'&#41; + &#40; rownum + 1&#41;/1440, 'YYYY-MM-DD HH24&#58;MI'&#41; <= '1900-01-02 00&#58;00'
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

anatoli
Δημοσιεύσεις: 54
Εγγραφή: 27 Σεπ 2005 20:04
Τοποθεσία: Greece

Παράγοντας Ημερολόγιο με Transact SQL και PL/SQL

Δημοσίευση από anatoli » 10 Οκτ 2005 16:08

Χθές μελετούσα το αντιστοιχο βοήθημα...πώς μας καταλαβαίνεις?
Σωστός! Τώρα θέλω να ρωτήσω και κάτι άλλο...για μία εφαρμογή χρησιμοποιώ την C++ Builder και δεν έχω ιδέα για τη συμπεριφορά των συναρτήσεων και αυτό που θέλω είναι να καταλήξω να κάνω ένα ημερολόγιο. Τί το θέλω αυτό? για την κράτηση ημερομηνιών κρατήσεων ενος ξενοδοχείου.
Γενικά είμαι στα χαμένα...άλλα θα το αντιμετωπίσω..
Εικόνα

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης