栃木,Web,WordPress,スマートフォン,野球,ラグビーなど
Oracle
Oracle文字列のサイズを取得する方法
2012年8月16日
Oracle(10g)で、文字数(バイト数)毎のレコード数を取得するクエリに関するメモ。
前提:会員ユーザは、会員登録時に会員ID(必須:半角6文字~15文字までの半角英数)を
登録する仕組みになっている。
やりたいこと:会員IDが、どの文字数でどれくらい登録されているのか、を文字数の昇順で出力したい。※結果によっては、6~15文字の仕様変更を検討したい、とか。
※テーブル名:carp_fanclub
※会員IDカラム名:kaiin_id
SELECT
length(kaiin_id) as 文字数,
count(*) as レコード数
FROM
carp_fanclub
GROUP BY
length(kaiin_id)
ORDER BY
length(kaiin_id) asc
※文字数ではなく、バイト数毎に出力したい場合は、”length“を”lengthb“に変えればおk。
がんばれ広島カープ!
目指せクライマックス!!
Oracle日付別カウント数集計
2011年7月22日
※2011/10/5 追記:Mototakerさんのご指摘により、一部修正を行いました。
Oracle(10g)での日付別集計の取得クエリに関するメモ。
前提:マツダスタジアムは、入場時に日付(date型)を時:分:秒までOracleに保存している。
欲しいデータ:2011年6月の入場者数を日別に抽出したい。
※テーブル名:zoom_zoom
※入場日付カラム名:enter_dt
SELECT
enter_dt as 入場日付,
count(enter_dt) as 入場者数
FROM
zoom_zoom
WHERE
enter_dt between to_date(‘2011/06/01′,’yyyy/mm/dd’) AND
to_date(‘2011/06/30′,’yyyy/mm/dd’)
GROUP BY
enter_dt
ORDER BY
enter_dt asc;
とすると、時:分:秒ごとにグルーピングされてしまい、日別にならない(T△T)
入場日付 |入場者数
—————————-+————-
2011/06/01 10:56:24 | 1
2011/06/01 11:12:12 | 1
2011/06/01 11:23:38 | 1
2011/06/01 11:38:32 | 1
・
・
・
なので、to_date関数を使ってenter_dtを日付変換することで、日別のカウントを取得。
SELECT
trunc(enter_dt) as 入場日付,
count(trunc(enter_dt)) as 入場者数
FROM
zoom_zoom
WHERE
enter_dt between to_date(‘2011/06/01 00:00:00′,’yyyy/mm/dd hh24:mi:ss’) AND
to_date(‘2011/06/30 23:59:59′,’yyyy/mm/dd hh24:mi:ss’)
GROUP BY
trunc(enter_dt)
ORDER BY
trunc(enter_dt) asc;
こうすると、日別の入場者数が取得可能にo(*^▽^*)o
入場日付 |入場者数
——————-+————-
2011/06/01 | 30,498
2011/06/02 | 32,129
2011/06/03 | 31,949
2011/06/04 | 32,134
・
・
・
がんばれ広島カープ!
マツダスタジアム行きたい!!
Oracle改行コードを含むレコード検索
2010年12月11日
Oracle(10g)「改行コードを含むレコードを検索する」クエリーの覚書き。
CHR関数を使って、指定カラムに改行コードを含むレコードを抽出。
select * from テーブル名 where カラム名 like ‘%’ || chr(13) || ‘%’;
ちなみに、多くの開発言語では改行をあらわす記号 ‘\r’ や ‘\n’ などがあるが、SQL や PL/SQL にはないとのこと。
始めは、
select * from テーブル名 where regexp_like (カラム名,’\n’)
とかやってみたけど、ダメでした(-_-)zzz