Home > SQL Archive

SQL Archive

【MySQL】INSERT文が重複キーがあるとUPDATEになる

  • Posted by: Keisuke
  • 2010年2月 2日 01:40
MySQLでON DUPLICATE KEY UPDATEという、便利な構文を見つけた。

書き方は、以下
--------------------------------
INSERT INTO hoge(
 id,
 name
)VALUES (
  1,
  'smile'
) ON DUPLICATE KEY
UPDATE
  name='world';
--------------------------------

どのように便利かというと、上記のばあい、idというカラムがプライマリーキーだとして、
テーブルにid=1のレコードが入っていなければ、INSERTして、入っていれば、nameカラムを
UPDATEしてくれる。
つまり、INSERT文とUPDATE文が一つのSQLで書けるのだ。

これは、便利。
SQLもだいぶ書けるようになったと思ったけど、まだまだ知らないことが多いなー。

【postgresql】posgesql8.2→8.4 to_date関数でエラー

  • Posted by: Keisuke
  • 2010年1月 8日 14:37
案件で、posgresqlをバージョンアップしたら、to_date関数でエラーが出た。

to_date(now(),'YYYYMMDD')

これが、8.2ではOKなのに、8.4だと、下記のエラーが出る。
function to_date(timestamp without time zone, unknown)

なんだこれーって調べてみると、to_date関数ってのは普通

to_date(text.text)

つまり、文字列を日付に変換するモノだから、第一引数は文字列じゃなくちゃいけない。
8.2までは、型制限とか厳しくなかったけど、8.3からちょっと厳しくなったみたい。

なので、下記のように、now()を無理やり文字列にすることで8.4でも動かすことができる。

to_date(now()::text,'YYYYMMDD')


ちゃんと、型も意識しながらプログラム組まないとダメだね。。。
勉強になりました。

【SQL】MySQLでauto_incrementを初期化する

  • Posted by: Keisuke
  • 2009年1月30日 21:14
表記の方法です。

テーブルの全てのレコードを削除した上で、以下のSQLを実行するだけでいいみたいです。


ALTER TABLE テーブル名 AUTO_INCREMENT = 1

【SQL】LPAD関数

  • Posted by: Keisuke
  • 2008年12月 5日 16:56
SQLにLPAD関数てのがあります。
左から文字列の充填をしてくれる関数です。

桁あわせをするときに便利です。

使い方は以下、

LPAD(列名,埋め込んだ後の文字数,'埋め込む文字')

(例)
hoge
+-----+
| No |
+-----+
| 1 |
| 2 |
| 6 |
| 10 |
| 156 |
+-----+

という、テーブルがあるとして
SELECT  LPAD(No,3,'0') FROM hoge

を実行すると。

 
+-------+
| No |
+-------+
| 001 |
| 002 |
| 006 |
| 010 |
| 156 |
+-------+

てな感じで、返ってきます。

また、使うかもしれないので、メモ。

【SQL】レコードをランダムに抽出

  • Posted by: Keisuke
  • 2008年10月22日 21:58
テーブル内のレコードをランダムに取得する方法です。

==============================
SELECT *
FROM hoge
ORDER BY random()
LIMIT 10
==============================

これで、ランダムに10件のレコードが取れます。

また使うかもしれないのでメモ。

SQL CASE式の使い方

  • Posted by: Keisuke
  • 2008年5月15日 17:09
SQLのCASE式がかなり便利です。
また、いつか使うかもしれないのでメモ。

以下のようなテーブルがあるとします

USER_LIST
------------------------------------------------------------
 |  id     |       name         |          sex         |
------------------------------------------------------------
 |   1     |     大塚愛         |          2            |
 |   2     |     大塚範一      |           1            |
 |   3     |   サイボーグ      |           3            |
------------------------------------------------------------

このテーブルに対して、
SELECT
       id,
       name,
       (
       CASE sex
             WHEN '1' THEN '男'
             WHEN '2' THEN '女'
             ELSE 'その他'
       END
       ) as sex
FROM USER_LIST

というSQLを書くと、

------------------------------------------------------------
 |  id     |       name         |          sex         |
------------------------------------------------------------
 |   1     |     大塚愛         |          女          |
 |   2     |     大塚範一      |           男          |
 |   3     |   サイボーグ      |       その他       |
------------------------------------------------------------

という結果が返ってきます。


今日は、SQLでかなりつまづいた・・・。
う~ん、まだまだ勉強が足りないですね。

SQLで文字列切り出し

  • Posted by: Keisuke
  • 2008年4月16日 16:22
PostgleSQLで文字列の切り出しをやりました。"substr"を使います。

SELECT substr('おおつかあい',1,4);
と書くと

おおつか
ってな感じで返ってきます。

開始位置以降、最後まで切り出す場合は、切り出す文字数を省略できるみたいです。

例えば、

SELECT substr('おおつかあい',5);
と書くと、

あい
と返ってきます。

なかなか便利ですね。

また使うかもしれないのでメモ。

SQLで文字列を数値に変換

  • Posted by: Keisuke
  • 2008年4月12日 19:29
SQLで文字列を数値に変換することができるみたいです。
書き方は以下

to_number( '01 ', '00' )
このように書くと、'01'という文字列が1という数値に変換されます。

このほかに、数値を文字列に変換する、to_charや文字列を日付データに変換する、to_dateという関数もあるみたいです。


う~ん、実際にプログラムを組んでると色々勉強になるな~。

Index of all entries

Home > SQL Archive

Iretのなかのひと
Links
あわせて読みたい
あわせて読みたいブログパーツ
Search
Links02
Feeds

Return to page top