Σχετικά με το Μάθημα
Demo: CAST & CONVERT
Στόχος αυτής της άσκησης είναι να αλλάξουμε τον τύπο των στηλών στον πίνακα Customers
:
- Να αλλάξουμε τη στήλη
date_of_birth
απόdatetime
σεdate
, για να αποθηκεύουμε μόνο την ημερομηνία χωρίς την ώρα. - Να αλλάξουμε τη στήλη
phone_number
απόvarchar
σεint
, κάτι που απαιτεί προσοχή, καθώς οι αριθμοί τηλεφώνου περιλαμβάνουν συχνά πρόθεμα ή έχουν περισσότερους από 10 ψηφία, οπότε πρέπει να το χειριστούμε κατάλληλα.
Χρήσιμες Συναρτήσεις
Οι παρακάτω συναρτήσεις είναι χρήσιμες για την εκτέλεση της άσκησης:
CAST(column AS datatype)
: Χρησιμοποιείται για να μετατρέψει μια στήλη σε άλλο τύπο δεδομένων.CONVERT(datatype, column)
: Χρησιμοποιείται για να μετατρέψει μια στήλη σε διαφορετικό τύπο δεδομένων, όπως αριθμητικό ή ημερομηνία.
Έρευνα Λύσης
Η έρευνα για τη λύση περιλαμβάνει τον εντοπισμό των στηλών που πρέπει να αλλάξουν και τη σωστή μετατροπή των δεδομένων.
- Για τη στήλη
date_of_birth
, η μετατροπή απόdatetime
σεdate
είναι σχετικά απλή και αφορά μόνο την αφαίρεση της ώρας. - Για τη στήλη
phone_number
, επειδή μπορεί να περιλαμβάνει περισσότερους από 10 χαρακτήρες ή να έχει σύμβολα όπως το+
ή άλλους χαρακτήρες, πρέπει να αποφασίσουμε πώς να χειριστούμε αυτά τα δεδομένα. Μια πιθανή λύση είναι να χρησιμοποιήσουμε τον τύποbigint
, ο οποίος υποστηρίζει μεγαλύτερους αριθμούς.
Λύση
Η λύση περιλαμβάνει τις εξής ενέργειες:
- Χρησιμοποιούμε τη συνάρτηση
CAST()
για να μετατρέψουμε τη στήληdate_of_birth
απόdatetime
σεdate
. - Χρησιμοποιούμε τη συνάρτηση
CONVERT()
για να μετατρέψουμε τη στήληphone_number
απόvarchar
σεbigint
, αφού οι τηλεφωνικοί αριθμοί μπορούν να είναι μεγαλύτεροι από 10 ψηφία και δεν μπορούμε να τους αποθηκεύσουμε ωςint
χωρίς να χαθούν ψηφία.
Ακολουθεί η εντολή για την αναζήτηση και τον έλεγχο των δεδομένων μετά τη μετατροπή:
Η συνάρτηση CAST()
μετατρέπει τη στήλη date_of_birth
σε τύπο date
, αποθηκεύοντας μόνο την ημερομηνία χωρίς την ώρα. Η συνάρτηση CONVERT()
μετατρέπει τη στήλη phone_number
σε τύπο bigint
, ώστε να υποστηρίζονται τηλεφωνικοί αριθμοί με περισσότερα από 10 ψηφία, όπως συμβαίνει σε αρκετές περιπτώσεις.