LoginSignup
2
0
この記事誰得? 私しか得しないニッチな技術で記事投稿!

おまえは今までにDBを検索してEXCELに貼り付けた回数をおぼえているのかw

Last updated at Posted at 2023-07-09

仕方がないからといって検索した内容をファイルに出力したくない人(※シャア専用

日々の業務の中でDBを検索しないといけない時ってありませんか。
昨日までに食べた食パンの数とか。
集計しないといけないときありますよね。検索したらEXCELですよね。
日本人EXCEL大好きだし。

普通の人はこんな感じだろうな、と。

MySQL を検索した場合。ひとまず検索するのはみんなの情報スキマ。
最近 postgreSQL も操作するようになって
MySQL は Oracle色が強いのかなって感じはじめた今日この頃。

それにしても標準SQL規格とは。Oracle にもあるのですね。
DBA_TABLES とかいつも見ていた遠い昔。

taro@macbook-air[YAMADA]> desc information_schema.tables;
--------------
desc information_schema.tables
--------------

+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)

taro@macbook-air[YAMADA]> 

postgreSQL を標準で検索した場合にはこんな感じ。
若干違いがあるの分かりますか。
いずれも縦の罫線「|」パイプで項目を区切っている書式で
MySQLチームは表っぽくするために上下左右も括る几帳面さ。

YAMADA => \d information_schema.tables;
                                    ビュー"information_schema.tables"
              列              |                型                 | 照合順序 | Null 値を許容 | デフォルト
------------------------------+-----------------------------------+----------+---------------+------------
 table_catalog                | information_schema.sql_identifier |          |               |
 table_schema                 | information_schema.sql_identifier |          |               |
 table_name                   | information_schema.sql_identifier |          |               |
 table_type                   | information_schema.character_data |          |               |
 self_referencing_column_name | information_schema.sql_identifier |          |               |
 reference_generation         | information_schema.character_data |          |               |
 user_defined_type_catalog    | information_schema.sql_identifier |          |               |
 user_defined_type_schema     | information_schema.sql_identifier |          |               |
 user_defined_type_name       | information_schema.sql_identifier |          |               |
 is_insertable_into           | information_schema.yes_or_no      |          |               |
 is_typed                     | information_schema.yes_or_no      |          |               |
 commit_action                | information_schema.character_data |          |               |

YAMADA => \q

information_schema は postgreSQLだけかと思ったら両方出てきて草。

美容整形スタート(MySQL)

MySQLの場合

まずEXCELの全セルを文字列にしてから貼り付ける
image.png

このままでもいいけど、やっぱりセルを分割してEXCELだから表にしたい

具体的な手順(省略w

image.png

ひとまずセルを選択して
image.png

区切り文字ウィザード発動。
image.png

その他で「パイプ」で区切り
image.png

区切った後の項目を全て文字列に選択して「OKグーグル」
image.png

一応表っぽくなってきた。
image.png

再度一番左のセルを選択して
image.png

左方向にシフト
image.png

項目名とデータの間に隙間ができるので
image.png

行を選択して削除
image.png

あとちょい。あとは全部を選択して
image.png

罫線を引いておけば完了。
image.png

でもさ★
項目の先頭に空白があったり、項目のお尻には空白が詰まっていること
気になる人はいませんか。

image.png

美容整形スタート(postgreSQL)

まずは全セルを文字列にしてから貼り付けする

image.png

具体的な手順(省略w

一番左を選択してから
image.png

区切り位置の指定ウィザード発動
image.png

変わらず「パイプ」。私はこれで会社をやめました(違
image.png

全部を選択して文字列にしておく(変換されちゃうから
image.png

あとは選択して表にするだけ
image.png

いらない行間を削除して
image.png

罫線引いたら表になった
image.png

でもやっぱり、このあたり気になりませんか。
先頭の空白とか、項目がないはずなのに半角空白で穴埋めされたデータ。
いりませんよね。

やりたいことは・・「トリム」。

もちろん sql を terminal で実行したのを切り貼りするのではなく
mysql でも postgreSQL でも
SQLの検索結果をファイルに出力することできます。

そうすれば区切り文字がタブになるので簡単にEXCELはりつけできます。
でもサーバ上に出力されたファイルをローカルにもってくるのって
結構大変だったりしませんか。

そもそもファイルに出力した内容を外部に持ち出していいの?って。
面倒ですよね。

そこでアレ。マクロの出番です

EXCELには好き勝手にマクロを登録することが可能です。
image.png

毎回マクロを作成するのは面倒ですよね。
そんな場合はアカウントに紐づく共通のマクロファイルに登録できます。

重要ポイント;これなら毎回マクロを作成しなくても使える。なんて神。

・ファイル名;PERSONAL.XLSB
・格納場所;C:\Users\TaroYamada\AppData\Roaming\Microsoft\Excel\XLSTART

Option Explicit

Sub 選択した範囲をトリム()
'
' 選択した範囲をトリム Macro
'
    Dim c As Range
    Application.ScreenUpdating = False

    For Each c In Selection
        c = WorksheetFunction.Trim(c)
    Next c
    
    Application.ScreenUpdating = True
End Sub

そしてマクロにショートカットキーを割当。
image.png

トリムのティーだ!
image.png

MySQLでも
さっき表にした部分を選択してから
image.png

コントロールティー!
image.png
半角空白が全桁埋められていた項目もなくなっています。スッキリ。

postgreSQLでも
さっき表にした部分を選択してから
image.png

コントロールティー!!
項目名とかちゃんと見えるようになったの分かりますかしら。
image.png

まとめ

「私しか得しないニッチな技術」ってキーワードをみたらドキッて。
地味に便利なので誰かに伝えたくて投稿。

空白トリムくらいしてから提出してよって依頼元から嫌な顔をされるのを
数行のマクロとショートカットを使うだけで回避できます。

どうか、みなさんにしあわせが届きますように🎅

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0