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のインストール問題を解決する

推薦する

HTML で水平ナビゲーション構造を設定する方法

この記事では、主にリスト構造を使用して水平ナビゲーション構造を設定する 2 つの方法を紹介します。こ...

IdeaはリモートDockerをデプロイし、ファイルを構成する

1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...

Vue の proto ファイルの関数呼び出しのグラフィカルな説明

1. protoをコンパイルするすべての .proto ファイルを保存するために、src フォルダー...

Dockerの核となる原則であるCgroupの詳細な説明

カーネル内の強力なツール cgroup は、NameSpace によって分離されたリソースを制限でき...

Linux ソースコードからのソケット (TCP) クライアント側での接続の例の詳細な説明

序文著者は、アプリケーションからフレームワーク、オペレーティング システムに至るまで、あらゆるコード...

MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します

長い間 MySQL を使ってきたので、SQL 文はすでに覚えていると思います。そこで、その実行原理を...

使用したコマンドを表示するLinuxコマンドメソッドの概要

システムでは多くのコマンドが使用されていますが、使用したコマンドをどのように確認すればよいでしょうか...

Linux システムで時間を取得して使用する方法

Linux システム時間には 2 種類あります。 (1)暦上の時刻。値は、指定された時刻、1970 ...

HTML印刷関連の操作と実装の詳細な説明

原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

MySQLフィールドのデフォルト値を設定する方法

目次序文: 1. デフォルト値に関する操作2. 使用上の提案要約:序文: MySQL では、テーブル...

初心者向けMySQLインデックス

序文MySQL インデックスで最も重要なデータ構造は B+ ツリーなので、まずは B+ ツリーの原理...

Redmine の Docker インストール手順

イメージをダウンロードします(オプションの手順です。省略した場合は、手順 3 と 4 で自動的にイン...

mysql 8.0.16 winx64 および Linux でルート ユーザーのパスワードを変更する方法

データベースへの接続などの基本的な操作はご自身で行ってください。この記事ではパスワードの変更方法を中...

MySQL 変数宣言とストアド プロシージャの分析

変数の宣言グローバル変数の設定@a='新しい変数' を設定します。関数やストアドプロ...