IISにOSSをインストールするための情報サイト [IIS de OSS 64bit]

IIS de OSS 64bit > MySQL > MySQLのSQL入門

今日から1日前の日付をYYYYMMDD形式で取得する

select date_format(adddate(now(), -1), '%Y%m%d') DATE from dual;

数値変換

  • 文字列型を数値型に変換する例
    select cast('07' as unsigned) from dual;

日付変換

  • 日付型を文字型に変換する例
    select date_format(now(), '%Y%m%d') from dual;
  • 文字型を日付型に変換する例
    select cast('20090727' as date) from dual;

来月の1日を取得する

例)2009/07/08の来月1日を取得する方法(今月の最終日に1日足す事で実現)

select adddate(last_day(cast('20090708' as date)), 1) from dual

今月の1日を取得する

例)2009/07/08の場合、1ヶ月前を取得 > 月末を取得 > 1日追加で行けそう

select adddate(last_day(date_add(cast('20090708' as date), interval -1 month)), 1) from dual

Oracleのrownumの実現

mysqlでrownumのような挙動を実現するには、limit句を用いるのが楽である。

select xxxxx limit 0, 3

とすると、3行目までの結果が返る。

indexを指定する(たぶん強制ではないインデックスの指定)

where句に副問合せがあったりすると無視される可能性がある。

select xxxxx from テーブル名 use index (インデックス名) where xxxxx

nullの置換

ifnullみたいな関数が無いので、coalesce関数を使う。
下の例ではDATA1がnullの場合0が返る
select coalesce(DATA1, 0) from TEST;

where句で正規表現を使う

like句の場所にregexp句を入れると正規表現マッチができるようです。
下記の例では「HOGE」列に数字で始まる10桁の英数を検索できます。
select * from TEST where HOGE regexp '^[0-9]{1}[0-9a-zA-Z]{9}$'

ちなみに正規表現置換機能は存在しないようである。replaceで何とかするしかないとか・・無理w

数字の0埋め

lpad関数を使う(バージョン4.1以上ではマルチバイト文字も1文字と数えるよう)

select lpad('9', 4, '0') from dual
→ 0009

文字列連結

concat関数を使う

select concat('abc', 'def', 'g') from dual
→ abcdefg

文字列置換

シングルバイトの場合はreplace関数を使う。

select replace('abcdef', 'de', 'abcde') from dual
→ abcabcdef

↓マルチバイトを含めた場合の失敗例

select replace('abcdef', 'de', 'ほげ') from dual
→ abcほ

四捨五入(Banker's rounding)

roundを使う。通常の四捨五入ではない。誤差を少なくするための四捨五入である。

select round(123.1211, 2) from dual
→ 123.12

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ
Last-modified: 2010-02-21 (日) 09:30:04 (3623d)