学習備忘録〜O'Reilly「初めてのSQL」7章 データの生成、操作、変換〜
はじめに
この備忘録は、新卒1年目の初学者バックエンドエンジニアの学習記録のためにつけているものです。
解釈違いや、誤情報がある可能性があります。見つけた際にはご指摘をお願いします。
概要
文字列データ、数値データ、時間データの生成、変換、操作について説明するが、この機能をカバーしているコマンドはSQL言語には存在しない。データの生成、変換、操作には、代わりに組み込み関数を使用する。SQL規格に含まれている関数もあるが、データベースベンダーが関数使用に準拠していないというのはよくあること。
文字列データを操作する
文字列データを操作するときには、以下の文字列データ型のいずれかを使用する。
- char
- 末尾をスペースで埋めた固定長の文字列を保持する。
- MySQLでは最大255文字、OracleDBでは最大2000文字、SQL Serverでは最大8000文字の長さの文字列を保持できる
- varchar
- 可変長の文字列を保持する
- MySQLでは最大65535文字、OracleDBでは最大4000文字、SQL Serverでは最大8000文字の長さの文字列を保持できる。
- text
- 可変長のかなり長い文字列を保持する
- MySQLでは4GBまでの弩級メントを対象とした複数のテキスト方を定義している。
- text型は将来のリリースで削除される予定なので、代わりにvarchar(max)型を使用することが推奨されている
文字列を生成する
使用例
mysql> INSERT INTO string_tbl ( char_id, vchar_id, text_id )
-> VALUES ( 'This is char data',
-> 'this is varchar data',
-> 'This is text data');
文字列を操作する
各データベースサーバには、文字列を操作するための組み込み関数がいろいろ含まれている。ここでは2種類の文字列関数(数値を返すものと文字列を返すもの)を見ていく。
数値を返す文字列関数
数値を返す文字列関数のうち、最もよく使われる関数の1つはlengthである。この関数は、文字列に含まれている文字の個数を返す。
mysql> SELECT LENGTH(char_flg) char_length,
-> LENGTH(vchar_flg) varchar_length,
-> LENGTH(text_flg) text_length
-> FROM string_tbl;
+-------------+----------------+-------------+
| char_lungth | varchar_length | text_length |
+-------------+----------------+-------------+
| 28 | 28 | 28 |
+-------------+----------------+-------------+
1 row in set (0.00sec)
文字列を返す文字列関数
倍位によっては、文字列からテキストの一部を取り出すか、文字t列にテキストを追加するという方法で、既存の文字列を変更しなければらないことがある。各データベースサーバには、これらのタスクに役立つ関数が含まれている。
ここの理解及んでいないので後日記載
数値データを操作する
文字列データとは異なり、数値データの生成はとても簡単。
mysql> SELECT (37 * 59) / (78 - ( 8 * 6 ));
算術関数を実行する
データベースサーバに組み込まれている数値関数のほとんどは、数値の平方根を求めるといった特定の算術演算に使われる。最もよく使われる数値関数のうち、数値型の引数を一つ受け取り、数位t型の戻り値を返すものを以下にまとめる。
関数名 | 説明 |
---|---|
acos( x ) | xの逆余剰を求める |
asin( x ) | xの逆正弦を求める |
atan( x ) | xの逆正接を求める |
cos( x ) | xの余弦を求める |
cot( x ) | xの余接を求める |
exp( x ) | e(x)を求める |
ln( x ) | xの自然対数を求める |
sin( x ) | xの正弦を求める |
sqrt( x ) | xの平方根を求める |
tan( x ) | cの正接を求める |
時間データを操作する
文字、数値、時間お家、データの生成や操作が最も複雑なデータが時間データ
時間データを生成する
生成方法は以下の3つが存在する
- 既存のdate,datetime、またはtime型の列データをコピーする
- date,tatetime、またはtime型の値を返す組み込み関数を実行する
- サーバによって評価される時刻データの文字列表現を作成する
時間データの文字列表現
日付フォーマットの構成要素
構成要素 | 定義 | 範囲 |
---|---|---|
YYYY | 年(世紀を含む) | 1000~9999 |
MM | 月 | 01~12 |
DD | 日 | 01~31 |
HH | 時 | 01~23 |
HHH | 経過時間 | -838~838 |
MI | 分 | 01~59 |
SS | 秒 | 01~59 |
日付に必要な構成要素
型 | デフォルトフォーマット |
---|---|
date | YYYY-MM-DD |
datetime | YYYY-MM-DD HH:MI:SS |
timestamp | YYYY-MM-DD HH:MI:SS |
time | HH:MI:SS |
Discussion