Dans l'article précédent, nous avons mentionné la fonction CAST, qui est utilisée pour la conversion de type explicite. Il existe de nombreux avantages à éviter les conversions de type implicites. En fait, il reste encore de nombreux détails à régler. Cet article présente principalement les connaissances de base de la conversion de type explicite MySQL et donne les résultats de l'analyse à travers des exemples.
Tout d’abord, jetons un œil à la conversion suivante :
mysql> SELECT CAST('2017-12-14' AS DATE); +----------------------------+ | CAST('2017-12-14' AS DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
Parmi eux :
2017-12-14 sont les données à convertir.
DATE est le type converti.
La syntaxe standard est la suivante :
CAST(expr AS type)
Ce qu'il faut noter ici, c'est que le type type ne prend pas en charge tous les types de données, mais prend en charge des types de données spécifiques, ce qui est également le sujet de l'article d'aujourd'hui. (J'ai subi cette perte. Je tenais pour acquis que tous les types de données étaient pris en charge, mais j'ai été giflé).
Erreur non prise en charge :
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
Types pris en charge
Voici une liste des types de données pris en charge par la fonction CAST :
类型 | 备注 |
---|---|
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 及更高版本 |
Remarque :
La plage de DATE prise en charge est : 1000-01-01 à 9999-12-31, (la version expérimentale est :)
Si c'est : 999-01-01, le résultat sera 0999-01-01.
Si c'est : 01-01-01, ce sera : 2001-01-01.
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. La valeur de expr dans la fonction CAST peut être convertie en type et le résultat de la conversion sera correct. Sinon, le résultat converti aura une valeur par défaut, telle que Null, 0, etc.
Par exemple : si un type Char est converti en type Demical, le résultat de la conversion est 0.
mysql> SELECT CAST('ANDYQIAN' AS DECIMAL); +-----------------------------+ | CAST('ANDYQIAN' AS DECIMAL) | +-----------------------------+ | 0 | +-----------------------------+ 1 row in set, 1 warning (0.00 sec)
Cas de conversion
Voici quelques exemples de conversion de type couramment utilisés.
Type DATE
mysql> select cast('2017-12-14' as DATE); +----------------------------+ | cast('2017-12-14' as DATE) | +----------------------------+ | 2017-12-14 | +----------------------------+ 1 row in set (0.00 sec)
Type d'heure
mysql> select cast('12:00:00' as TIME); +--------------------------+ | cast('12:00:00' as TIME) | +--------------------------+ | 12:00:00 | +--------------------------+ 1 row in set (0.00 sec)
TYPE DE DATETIM
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)
Type SIGNÉ
mysql> select cast('-1024' as SIGNED); +-------------------------+ | cast('-1024' as SIGNED) | +-------------------------+ | -1024 | +-------------------------+ 1 row in set (0.00 sec)
Type NON SIGNÉ
mysql> select cast('-1024' as UNSIGNED); +---------------------------+ | cast('-1024' as UNSIGNED) | +---------------------------+ | 18446744073709550592 | +---------------------------+ 1 row in set, 1 warning (0.00 sec)
Type DECIMAL
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)
Recommandations associées :
La meilleure façon de mettre à niveau le partage d'instance MySQL
Explication détaillée de php encapsulation de la classe d'opération Mysql
Comment PHP résout le problème des données chinoises tronquées stockées dans MySQL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!