PostgreSQL ver 8.4 で動作済み

以下のように数字が入っている文字列を昇順・降順したいと思います。

 例 )
  jaswill1
  jaswill2
  jaswill3

【文字列ソート】

 ORDER BY
    TO_NUMBER ( SUBSTRING ( USR_ID FROM ‘[0-9].*$’ ) , ‘[9]’ ) , USR_ID


ORDER NY句に記述されている「SUBSTRING」で部分文字列(後ろの‘[9]’)を取得し、

「TO_NUMBER」で数値に変更しています。FORM句では条件に該当するものを取得します。

あとは昇順か降順かをORDER BY句に追記するだけです。

あと、よくあるのが重複チェックですね。

せっかくなので、メモメモ φ(。。)

【重複データ取得】————————————————————–

 SELECT
    A.USR_ID AS USR_ID
 FROM
    TABLE_A A
 WHERE
    A.DELETE_FLG = 0
 GROUP BY
    A.USR_ID
 HAVING
    COUNT ( A.USR_ID )  >  1 
—————————————————————————————

 っで、↑コレを【文字列ソート】と組み合わせると・・・

【重複データの文字列ソート】————————————————

 SELECT
    A.USR_ID AS USR_ID
 FROM

    TABLE_A A
 WHERE

    A.DELETE_FLG = 0
    AND

    EXISTS
    (  SELECT
         AA.USR_ID AS USR_ID
     FROM

         TABLE_A AA
     WHERE

          AA.USR_ID = A.USR_ID
     GROUP BY

                    AA.USR_ID

     HAVING

                   
COUNT ( AA.USR_ID )  >  1
    )
 ORDER BY
     TO_NUMBER ( SUBSTRING ( A.USR_ID FROM ‘[0-9].*$’ ) , ‘[9]’ ) , A.USR_ID
    ,A.USR_ID DESC(ASC)

—————————————————————————————

・・・雑だけど気にしない。

これで、重複した文字列をソートできます。

分かりやすいように、ナンバー(No)とかつけると、順番になっている事が分かりやすいと思います。

ちょっとした備忘録です。

【カテゴリ】システム系データベース
【タグ】

こんにちは、Mizutaniです。

PostgreSQLで正規表現ができることをネットで調り、さっそくトライ!
したのですが、検索の仕方が悪かったのか、日本語交じりだとうまくいきませんでした。
なので、基礎的な正規表現の例を紹介します。

ちなみにバージョンは PostgreSQL 8.4です。


◆正規表現はPostgreSQLで用意されているものを用います。

SELECT * FROM table_a WHERE id ~ ‘[0-9]+’;

これを応用します。

◆半角英数字も問題なくチェックできます。

SELECT * FROM table_a WHERE id ~ ‘[0-9a-zA-Z]*’;

◆ただし、このままだと日本語が混じった文(abcあd)は判断できなかったので修正。

SELECT * FROM table_a WHERE id ~ ‘^[0-9a-zA-Z]*$’;

これで半角英数字のチェックはできると思います。
意外と簡単にできますね。

◆ちなみに、
~ (チルダ)は必ずパターンの先頭に書きます。
先頭以外に配置してしまうとリテラルとして解釈されるので注意。
あと は行の終わりを意味します。

以上です。

【カテゴリ】システム系データベース
【タグ】

プロフィール

愛知県名古屋市にあるジャスウィルで働く社員です。

ジャスウィルは大学事業に特化したシステムを提案しています。『大学向け事務・教務統合パッケージ―TriR Campus』を開発しています。


Facebookページでは、イベントや普段の社員の様子を公開中♪
ぜひご覧ください☆

過去一年の月別記事 全て表示