日付betweenの落とし穴 betweenは使いやすいものの、日付で取り扱う時には注意が必要です。 timestamp型で取り扱う場合で、 between {from} and {to} で、toの部分を日付にすると、その日の0時0分0秒までしか対象になりません。 例) select * from ( ...
もっと読む
カテゴリ: SQL
to_single_byte でシングルバイト文字に変換
to_single_byte でシングルバイト文字に変換 データ内に半角全角入り乱れてアルファベットや数字が入ってる時、 正規表現でやるよりそもそも一旦全部半角にした方が楽なんじゃ、と思って使ってみました。 select to_single_byte('あいうえおカキクケコABCDE、 ...
もっと読む
1行のインサートで複数行突っ込む方法(insert into ... values)
1行のインサートで複数行突っ込む方法(insert into ... values) はい、複数行のinsert文を書いていたのですが、 同じだったら1insertでいけるじゃん、ということで調べてみました。 元々はPostgreSqlでやろうと思っていたら、oracleでもmySQLでも使えるっぽい。 ...
もっと読む
oracleで数字と文字が混在しているときに、数字だけ使いたい(ORA-01722の解消)
oracleで数字と文字が混在しているときに、数字だけ使いたい(ORA-01722の解消) はい、データの持ち方が雑。 しかもデータのぶつけ先が数値(number型)のときに割と困ります。 to_numberしてぶつけているのですが、案の定数値にならない文字が入っていました。 ...
もっと読む
oracleで自分のロール回りを調査するSQL
oracleで自分のロール回りを調査するSQL ●自分についているロールを確認する方法 select * from sys.user_role_privs; ●ロールについて一覧を出す select * from sys.role_sys_privs; ●ロールを付ける grant ... (下のサイトを参照) http://itref.fc2web ...
もっと読む
postgresqlでlistaggみたいなことを探してみた
postgresqlでlistaggみたいなことを探してみた string_agg関数で行けるそうです。 postgresqlで、Ver9から実装されたようなので、凄い古いバージョン使っている場合には、 他の記載方法で対応してみてください(下の参考サイト) ●使い方 select string_agg(da ...
もっと読む
Error: ERROR: subquery in FROM must have an alias というエラーが出た
Error: ERROR: subquery in FROM must have an alias というエラーが出た PostgreSQLでは、副問い合わせを使った時に別名を付けないと 上記のエラーが出るそうです。 oracleの癖で適当にSQLを作っていたら怒られました。 ●エラー例 select * from (select 1 u ...
もっと読む
oracleでカンマ区切りの文字列を複数行に展開する(横持ち→縦持ち)
oracleでカンマ区切りの文字列を複数行に展開する(横持ち→縦持ち) 複数行を1セルに突っ込む、ListAgg関数があるので、 その逆はあるのかなと探してみたものの、どうも見当たらなかったので、再帰with句で頑張りました。 ひょっとしたらもっといい方法があるかも? ...
もっと読む
oracleで特殊文字の削除を、正規表現で簡単にやる(REGEXP_REPLACE)
oracleで特殊文字の削除を、正規表現で簡単にやる(REGEXP_REPLACE) テキストデータを取り扱っていると、どうしても特殊文字が入ってくることがあるのですが、 文字だけ抜き出したい、という時に1つずつ置換するのは面倒(そして遅い) というこことで、正規表現 ...
もっと読む
SQLでexistsについて、1がいいのか、*がいいのか
SQLでexistsについて、1がいいのか、*がいいのか 前から盲目的に、 where exists (select 1 from table where ...) とやっていたのですが、ふと他の人のSQLを見ると where exists (select * from table where ...) となっていまして。 existsで不要なデ ...
もっと読む