Im vorherigen Artikel haben wir die CAST-Funktion erwähnt, die für die explizite Typkonvertierung verwendet wird. Die Vermeidung impliziter Typkonvertierungen bietet viele Vorteile. Tatsächlich gibt es hier viele Details, die geklärt werden müssen. In diesem Artikel werden hauptsächlich die Grundkenntnisse der expliziten MySQL-Typkonvertierung vorgestellt und die Analyseergebnisse anhand von Beispielen dargestellt.
Schauen wir uns zunächst die folgende Konvertierung an:
mysql> SELECT CAST('2017-12-14' AS DATE); +----------------------------+ | CAST('2017-12-14' AS DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
Darunter:
2017-12-14 sind die zu konvertierenden Daten.
DATE ist der konvertierte Typ.
Die Standardsyntax lautet:
CAST(expr AS type)
Hierbei ist zu beachten, dass der Typtyp nicht alle Datentypen unterstützt, sondern bestimmte Datentypen unterstützt, was auch im Mittelpunkt des heutigen Artikels steht. (Ich habe diesen Verlust erlitten. Ich ging davon aus, dass alle Datentypen unterstützt werden, aber ich wurde ins Gesicht geschlagen.)
Nicht unterstützter Fehler:
mysql> SELECT CAST('1024' AS int); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int)' at line 1
Unterstützte Typen
Im Folgenden finden Sie eine Liste der von der CAST-Funktion unterstützten Datentypen:
类型 | 备注 |
---|---|
DATE | YYYY-MM-DD |
DATETIME | YYYY-MM-DD HH:mm:ss |
TIME | HH:mm:ss |
DECIMAL | 通常用于带小数位 |
CHAR | 固定长度字符串 |
NCHAR | 类型于CHAR一致 |
SIGNED | 一个有符号的64整数位 |
UNSIGNED | 一个无符号的64整数位 |
BINARY | 二进制字符串 |
JSON | MySQL 5.7.8 及更高版本 |
Hinweis:
Der unterstützte Bereich von DATE ist: 1000-01-01 bis 9999-12-31 (die experimentelle Version ist:)
Wenn es 999-01-01 ist, lautet das Ergebnis 0999-01-01.
Wenn es der 01.01.01 ist, wird es der 01.01.2001 sein.
mysql> select cast('999-11-11' as DATE); +---------------------------+ | cast('999-11-11' as DATE) | +---------------------------+ | 0999-11-11 | +---------------------------+ 1 row in set (0.00 sec)
mysql> select cast('01-11-11' as DATE); +--------------------------+ | cast('01-11-11' as DATE) | +--------------------------+ | 2001-11-11 | +--------------------------+ 1 row in set (0.00 sec)
mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.20 | +-----------+ 1 row in set (0.00 sec)
2. Der Wert von expr in der CAST-Funktion kann in einen Typ konvertiert werden, und das Konvertierungsergebnis ist korrekt. Andernfalls hat das konvertierte Ergebnis einen Standardwert wie Null, 0 usw.
Beispiel: Wenn ein Char-Typ in einen Demical-Typ konvertiert wird, ist das Konvertierungsergebnis 0.
mysql> SELECT CAST('ANDYQIAN' AS DECIMAL); +-----------------------------+ | CAST('ANDYQIAN' AS DECIMAL) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set, 1 warning (0.00 sec)
Konvertierungsfall
Hier sind einige häufig verwendete Beispiele für die Typkonvertierung.
Datumstyp
mysql> select cast('2017-12-14' as DATE); +----------------------------+ | cast('2017-12-14' as DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
Typ ZEIT
mysql> select cast('12:00:00' as TIME); +--------------------------+ | cast('12:00:00' as TIME) | +--------------------------+ | 12:00:00 | +--------------------------+ 1 row in set (0.00 sec)
DATETIM-TYP
mysql> select cast('2017-12-14 00:11:11' as DATETIME); +-----------------------------------------+ | cast('2017-12-14 00:11:11' as DATETIME) | +-----------------------------------------+ | 2017-12-14 00:11:11 | +-----------------------------------------+ 1 row in set (0.00 sec)
SIGNIERTER Typ
mysql> select cast('-1024' as SIGNED); +-------------------------+ | cast('-1024' as SIGNED) | +-------------------------+ | -1024 | +-------------------------+ 1 row in set (0.00 sec)
UNSIGNED-Typ
mysql> select cast('-1024' as UNSIGNED); +---------------------------+ | cast('-1024' as UNSIGNED) | +---------------------------+ | 18446744073709550592 | +---------------------------+ 1 row in set, 1 warning (0.00 sec)
DECIMAL-Typ
mysql> select cast('18.11' as DECIMAL(18,2)); +--------------------------------+ | cast('18.11' as DECIMAL(18,2)) | +--------------------------------+ | 18.11 | +--------------------------------+ 1 row in set (0.00 sec)
Verwandte Empfehlungen:
Der beste Weg, die MySQL-Instanzfreigabe zu aktualisieren
Detaillierte Erklärung von PHP Kapselung der MySQL-Operationsklasse
Wie PHP das Problem der in MySQL gespeicherten verstümmelten chinesischen Daten löst
Das obige ist der detaillierte Inhalt vonBeispielfreigabe für die explizite MySQL-Typkonvertierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!