dateコマンドで曜日を取得する

2021-07-02

MySQLでCSVファイルにエクスポートした場合、「Null」が「¥N」になる

下記のように「SELECT * FROM 〜〜 INTO OUTFILE 〜〜」でMySQLのデータをCSVファイルにエクスポートした場合、「Null」を含むとその値が「¥N」となって出力されます

mysqL>
SELECT * FROM table_name
INTO OUTFILE '/var/tmp/test_table.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"';

「¥N」を「””」などの空白に置換すれば空白扱いになりますが、その都度行うのは面倒ですしデータが大きいと置換に時間がかかります。

IFNULL関数で、NULLの場合は、空文字に設定して出力する

MySQLでは、「Null」が「¥N」になってしまうのは、MySQLではNullと空文字の扱いが違うためです。
そのため、Nullを含む場合は出力時に「空文字」になるように、IFNULL()関数してNullの場合は、どのように置換するか指定します

mysqL>
SELECT name, price, IFNULL(code, '') FROM table_name
INTO OUTFILE '/var/tmp/test_table.csv'
  FIELDS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"';

 「date」コマンドで指定された日付の曜日を取得したい場合は、「date -d YYYYMMDD '+%w’」で曜日が取得できます

$ date -d 20181003 '+%w'
3

「date -d 20181003」で日時を指定して、「%w」で曜日を取得しています。
曜日の数字は、「0 〜 6」で表示され、「0」が日曜日、「6」が土曜日となります

シェルスクリプトで曜日判定で処理を分けたい場合は以下のようにすれば、指定された曜日によって処理を分けることができます

$ vim test.sh
#!/bin/bash

DATE1=20180930
DATE2=20181003

SUN=`date -d $DATE1 '+%w'`
THU=`date -d $DATE2 '+%w'`

if [ $SUN -eq 0 ] ; then
  echo "日曜日です"
fi
if [ $THU -eq 3 ] ; then
  echo "水曜日です"
fi

$ sh test.sh
日曜日です
水曜日です

 

スポンサーリンク