2015年3月26日木曜日

[C# / Excel] ExcelにSQLを投げるツールを作ってみた

最近、Excelのシート間でデータを探す機会が多いのですが
一々VLOOKUPとかを使うのが面倒になってきたので、
Excelファイルに対してSQLを実行、データ表示するツールを作ってみました。
# 誰得?(笑)


とりあえず、scott.xlsxを用意。(Oracleのアレ)

■EMPシート
















■DEPTシート
















■作ったツールでSQLを実行した結果


















こんな感じ。


そのうち、ファイル間でも検索できるようにしたいなぁ。

2015年3月13日金曜日

[Java] 重複排除速い。。

Oracleにあるデータを重複排除しようと思ってDISTINCTをかけると
10分以上返ってこない、という状況が発生。

DISTINCTしなければ数秒で返ってくるので、プログラム的になんとかしてみようと
Javaを選択。(ほぼ初心者)

とりあえずDISTINCTしないでデータをテキストに出力して
List<String>で読み込み、HashSetにつっこんで回してみたところ
あっという間に重複排除した結果が得られました。


Javaのちからってすげー!

2015年3月10日火曜日

[Oracle] ある月の日付一覧を取得するSQL

とあるテーブルのデータを、休日も含めて(休日はレコードなし)
出力したいという要望があったので、日付一覧をとるSQLを覚書。

SELECT TO_CHAR(TO_DATE(:TARGET_MONTH, 'YYYY/MM') + ROWNUM - 1, 'YYYY/MM/DD')
  FROM "31レコード以上ある適当なテーブル/ビュー"
 WHERE ROWNUM <= EXTRACT(DAY FROM LAST_DAY(TO_DATE(:TARGET_MONTH, 'YYYY/MM')))

Oracle以外の場合は、編集が必要ですね。。

2015年3月3日火曜日

[Linux] mailコマンドでメール送信すると本文にヘッダ情報が混入する

シェルから自動送信されるメールの本文に User-Agent とかの
ヘッダ情報が混入されてしまう現象を確認、解決したので覚書。

■環境
SUSE Linux Enterprise Server 11 (x86_64)

■変更前
send_mail() {
    from=$1
    to=$2
    inputEncoding="utf-8"
    outputEncoding="iso-2022-jp"
    subjectHead="=?${outputEncoding}?B?"
    subjectBody="`echo "$3" | iconv -f ${inputEncoding} -t ${outputEncoding} | base64 | tr -d '\n'`"
    subjectTail="?="
    subjectAll=${subjectHead}${subjectBody}${subjectTail}
    echo "$contents" | mail -s "$subjectAll" "$to" -- -f "$from"
    return $?
}

from="from@hoge.hoge"

to="to@hoge.hoge"
subject="件名"
contents="本文"
send_mail "$from" "$to" "$subject" "$contents"
if [ $? -eq 1 ]; then
    echo "send mail failure"
    exit 1
fi
echo "send mail success"

■変更後
send_mail() {
    from=$1
    to=$2
    inputEncoding="utf-8"
    outputEncoding="iso-2022-jp"
#    subjectHead="=?${outputEncoding}?B?"
#    subjectBody="`echo "$3" | iconv -f ${inputEncoding} -t ${outputEncoding} | base64 | tr -d '\n'`"
#    subjectTail="?="
#    subjectAll=${subjectHead}${subjectBody}${subjectTail}
    contents=`echo -e "$4"`  #| iconv -f ${inputEncoding} -t ${outputEncoding}`"
#    echo "$contents" | mail -s "$subjectAll" "$to" -- -f "$from"
    echo "$contents" | mail -s "$3" "$to" -- -f "$from"
    return $?
}

from="from@hoge.hoge"

to="to@hoge.hoge"
subject="件名"
contents="本文"
send_mail "$from" "$to" "$subject" "$contents"
if [ $? -eq 1 ]; then
    echo "send mail failure"
    exit 1
fi
echo "send mail success"


調べてもあまり有用な情報がなく大変でした。。
Linuxのディストリビューションによっても動作が異なりそう。