DB2 4 min read

Db2でCSVを出力する ― EXPORTの書き方と、数値の+0や日付の形式を直す修飾子

Db2 で表を CSV に出すときは EXPORT ... OF DEL を使います。既定のままだと次のように出ます。

$ db2 "export to /tmp/emp.del of del select EMPNO, FIRSTNME, LASTNAME, HIREDATE, SALARY, BONUS, COMM from employee"
$ head -1 /tmp/emp.del
"000010","CHRISTINE","HAAS",19950101,+0152750.00,+0001000.00,+0004220.00

まず見る(結論)

db2 "export to /tmp/emp.csv of del
       modified by codepage=1208 decplusblank striplzeros datesiso
       select * from employee"

症状 → 原因 → 対処(逆引き)

症状 原因 対処
日本語が化ける(0x1A になる)。rc=0 CLP のコードページが UTF-8 でない(LANG=C、cron など) modified by codepage=1208
数値が +0152750.00 DECIMAL は符号とゼロ埋めつきで出る decplusblank striplzeros(先頭に空白が1つ残る)
日付が 19950101 DATE の既定は区切りなし datesiso
時刻が 2026-10-27-11.28.14.487530 TIMESTAMP の既定は Db2 形式 timestampformat="YYYY-MM-DD HH:MM:SS"
見出し行が無い EXPORT に見出しを付ける修飾子は無い SYSCAT.COLUMNS から列名を作って前に足す
SQL3132W、rc=2、LOB 列が切れる LOB は 32,700 バイトで切り捨て lobs to ... modified by lobsinfile
SQL3001C(I/O エラー) 出力先に書き込み権限が無い・ディレクトリが無い インスタンスユーザーが書ける場所に出す

NULL は ,,、空文字は "" で出るので、取り込む側で区別できます。区切り文字は coldel;(セミコロン)や coldel0x09(タブ)で変えられます。

見出し行を付ける

db2 -x "select listagg(COLNAME, ',') within group (order by COLNO)
          from SYSCAT.COLUMNS where TABSCHEMA = 'DB2INST1' and TABNAME = 'EMPLOYEE'"

出力された1行(行末の空白は削る)を、EXPORT したファイルの先頭に連結します。

それでも分からないとき(実機ログつきの詳解)

LANG=C で EXPORT した出力を od -c で見た結果、Shift_JIS(codepage=943)での出力、LOB を別ファイルに出したときの中身は、Zennのフル記事にまとめています。

▶ Zennで続きを読む(無料)

Db2のEXPORTでCSVを出す ― 日本語が0x1Aに化ける・DECIMALの+0埋め・LOBの切り捨て


実機ログつきの詳解を読む →

関連: Db2のIMPORT・INGEST・LOAD / Db2のVARCHARに日本語が入らない / db2moveで移行したら表が空

この記事のような現場のTIPSを、Db2運用の全体像として12章に体系化しました。公式マニュアルには載らない「あのとき知っていれば」を減らすための1冊です。

現場で引ける Db2 の教科書

現場で引ける!Db2実践エンジニア・バイブル

Db2はRDBMS市場でシェア数%。情報が少なく、頼れるのは膨大な公式マニュアルだけ―― そんな現状を変えたくて、「なぜこの値にするのか」「この障害のとき次に何を見るのか」という、マニュアルに載っていない現場の文脈を1冊にまとめました。書いてあることはすべて実際の現場で経験したことです。

アーキテクチャ/構成パラメーター選定/セキュリティ/バックアップ・リカバリ/HADR/pureScale/日常点検の自動化/メモリ・ロック競合/SQLチューニング/RUNSTATS・REORG/MON_GET監視/現場の難題集 ―― 全12章+運用シェルスクリプト集。

Zennで読む →