MySQLの明示的な型変換の簡単な分析

MySQLの明示的な型変換の簡単な分析

CAST関数

前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙的な型変換を回避することには多くの利点があります。実際のところ、ここでは整理する必要がある詳細がまだたくさんあります。

まず、次の変換を見てみましょう。

mysql> SELECT CAST('2017-12-14' AS DATE);
+----------------------------+
| キャスト(日付: '2017-12-14') |
+----------------------------+
| 2017-12-14 |
+----------------------------+
セット内の 1 行 (0.00 秒)

で:

2017-12-14が変換対象となるデータです。

変換された型はDATEです。

標準的な構文は次のとおりです。

CAST(式 AS 型)

ここで注目すべきは、type はすべてのデータ型をサポートしているわけではなく、特定のデータ型をサポートしているということです。これが今日の記事の焦点でもあります。 (私は以前にもこの損失を経験しました。すべてのデータ タイプがサポートされていることを当然だと思っていましたが、ひどい目に遭いました)。

サポートされていないエラー:

mysql> SELECT CAST('1024' AS int);
エラー 1064 (42000): SQL 構文にエラーがあります。1 行目の 'int)' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

サポートされているタイプ

CAST 関数が変換をサポートするデータ型のリストは次のとおりです。

タイプ述べる
日付年-月-日
日時YYYY-MM-DD 時間:分:秒
時間時:分:秒
小数点通常、小数点とともに使用される
文字固定長文字列
ンチャー型はCHARと一致している
署名済み符号付き64ビット整数
未署名符号なし64ビット整数
バイナリバイナリ文字列
翻訳MySQL 5.7.8 以降

知らせ:

サポートされている日付の範囲は、1000-01-01 から 9999-12-31 です (実験バージョン:)

999-01-01 の場合、結果は 0999-01-01 になります。

01-01-01 の場合は、2001-01-01 になります。

mysql> 選択キャスト('999-11-11'をDATEとして);
+---------------------------+
| '999-11-11' を DATE としてキャスト |
+---------------------------+
| 0999-11-11 |
+---------------------------+
セット内の 1 行 (0.00 秒)
mysql> キャストを選択します('01-11-11' を DATE として);
+--------------------------+
| キャスト('01-11-11' を DATE として) |
+--------------------------+
| 2001-11-11 |
+--------------------------+
セット内の 1 行 (0.00 秒)
mysql> バージョンを選択します();
+-----------+
| バージョン() |
+-----------+
| 5.7.20 |
+-----------+
セット内の 1 行 (0.00 秒)

2. CAST 関数の expr の値は型に変換でき、変換結果は正しいです。そうでない場合、変換後の結果は Null、0 などのデフォルト値になります。

たとえば、Char 型を Demical 型に変換すると、変換の結果は 0 になります。

mysql> SELECT CAST('ANDYQIAN' AS DECIMAL);
+-----------------------------+
| CAST('ANDYQIAN' を DECIMAL として) |
+-----------------------------+
| 0 |
+-----------------------------+
セットに 1 行、警告 1 件 (0.00 秒)

コンバージョン事例

よく使用される型変換の例をいくつか示します。

日付型

mysql> キャストを選択します('2017-12-14' を DATE として);
+----------------------------+
| キャスト('2017-12-14' を日付として) |
+----------------------------+
| 2017-12-14 |
+----------------------------+
セット内の 1 行 (0.00 秒)

時間型

mysql> キャストを選択します('12:00:00' を TIME として);
+--------------------------+
| '12:00:00' を TIME としてキャストします |
+--------------------------+
| 12:00:00 |
+--------------------------+
セット内の 1 行 (0.00 秒)

DATETIM型

mysql> キャストを選択します('2017-12-14 00:11:11' を DATETIME として);
+-----------------------------------------+
| キャスト('2017-12-14 00:11:11' を DATETIME として) |
+-----------------------------------------+
| 2017-12-14 00:11:11 |
+-----------------------------------------+
セット内の 1 行 (0.00 秒)

SIGNEDタイプ

mysql> '-1024' を SIGNED としてキャストを選択します。
+-------------------------+
| '-1024' を SIGNED としてキャスト |
+-------------------------+
|-1024 |
+-------------------------+
セット内の 1 行 (0.00 秒)

UNSIGNED 型

mysql> '-1024' を UNSIGNED としてキャストを選択します。
+---------------------------+
| '-1024' を UNSIGNED としてキャスト |
+---------------------------+
| 18446744073709550592 |
+---------------------------+
セットに 1 行、警告 1 件 (0.00 秒)

DECIMAL型

mysql> '18.11' を DECIMAL(18,2) としてキャストを選択します。
+--------------------------------+
| '18.11' を DECIMAL(18,2) としてキャストします |
+--------------------------------+
| 18.11 |
+--------------------------------+
セット内の 1 行 (0.00 秒)

以上が今回のコンパイル内容です。テスト時にコマンドを入力して試すことができます。分からないことがあれば、下のコメント欄で議論することができます。

以下もご興味があるかもしれません:
  • MySQLの暗黙的な変換問題の解決
  • MySQLの暗黙的な型変換の概要
  • MySQL の暗黙的な型変換の罠とルール
  • MySQL 時間差関数 (TIMESTAMPDIFF、DATEDIFF)、日付変換計算関数 (date_add、day、date_format、str_to_date)
  • Python を使用して MySQL データベースのデータを JSON データに変換する方法
  • MySQL でよく使われる型変換関数の概要 (推奨)
  • MySQL の日付関数と日付変換およびフォーマット関数
  • MySQL NULLデータ変換方法(必読)
  • MySQLの暗黙的な変換について話す

<<:  TomcatをダウンロードしてLinuxにインストールする詳細な手順

>>:  Linux Tensorflow2.0のインストール問題を解決する

推薦する

MySQLのexplain型の詳細な説明

導入:多くの場合、さまざまな選択ステートメントを使用して必要なデータを照会した後、多くの人は作業が正...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

Linux で一般的なソフトウェアを設定する方法

新しいLinuxサーバーを入手する場合、通常は次の5つの構成を実行する必要があります。 HOSTAN...

MySQLデータベーストリガーの詳細な説明

目次1 はじめに2 トリガーの紹介3 トリガーを作成する4 トリガーを表示5. トリガーの削除6 結...

Flex プログラム Firefox で中国語を入力すると文字化けするバグ

Firefox の下位バージョンでは中国語の文字を入力できず、上位バージョンでは文字化けした文字が表...

デジタルテーブル特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたデジタル時計エフェクトを紹介します。エフェクトは次のとお...

mysql 5.7.23 winx64 解凍バージョンのインストールチュートリアル

参考までに、mysql-5.7.23-winx64 解凍版の詳細なインストールチュートリアルです。具...

JavaScript 関数のコンテキストのルールは何ですか?

目次1. ルール 1: Object.Method() 1.1 ケース1 1.2 ケース2 1.3 ...

HTML のキャンバスに基づくスクリーンショットのデモ

冒頭に書いた以前、Renren で JS ベースのスクリーンショット ソリューションについて説明した...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

HTML でよく使用されるエスケープ文字の概要

HTML でよく使用されるエスケープ文字をまとめると次のようになります。 &nbsp; 改行...

MySQL 接続失敗の一般的な障害と原因

==================================================...

MySQL InnoDB ロック メカニズムの詳細な例

1. InnoDBのロック機構InnoDB ストレージ エンジンは、行レベルのロックとトランザクショ...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

MySQLで更新可能なビューを作成する方法の詳細な説明

この記事では、例を使用して、MySQL で更新可能なビューを作成する方法について説明します。ご参考ま...