SQLserver 日付の書式が変更できない。

アクセスのリンクテーブルの書式が変更できない。

SQLserver側にて、データ形式を見ると、

datetime2(7)になっている。

それをdatetimeに変更してもアクセス側がかわらない。

2017-01-01 00:00:00

困った。

結論は、リンクを貼りなおせば治った。2017/01/01

Access 日付の計算

何日後」「何ヶ月後」「何年後」を表示する為にDateAdd関数を使う
※当日を含めた日数を表示する

DateAdd(“表示する時間の単位”,”時間の間隔”,”基準とする日”)

時間の単位一覧
yyyy  : 年
q    : 四半期
m    : 月
y    : 年間通算日(日数)
d    : 日
w    : 曜日(数値)
ww    : 週
h    : 時
n    : 分
s    : 秒
例 : フィールド1の日にちから、3日後を表示

前提 :フィールド1 「2011/04/01」

フィールドに下記を入力
日数 : DateAdd(“d”,3,[フィールド1])

結果 :「2011/04/03」

半年前

DateAdd(“m”,-6,[フィールド1])

バッチファイルの日付

全日の日付を求めるバッチファイル

REM 対象日付
SET YYYYMMDD=%DATE:~-10%
SET YY=%YYYYMMDD:~0,4%
SET MM=%YYYYMMDD:~5,2%
SET DD=%YYYYMMDD:~8,2%

#########当日日付#########
ECHO 対象日付 %YY%年 %MM%月 %DD%日
######################
※だた表示させているだけなので、削除してOK

REM 前日を求める
SET /A DD=1%DD%-1
SET DD=%DD:~-2%

REM (グレゴリオ暦)閏年か
SET /A LEAP=%YY% %% 400
IF NOT %LEAP%==0 SET /A LEAP=%YY% %% 100 – 1
IF NOT %LEAP%==-1 SET /A LEAP=%YY% %% 4

REM 月またぎの対応
IF “X%DD%”==”X00” (
IF “X%MM%”==”X01” (SET MM=12& SET DD=31& SET /A YY=%YY%-1)
IF “X%MM%”==”X02” (SET MM=01& SET DD=31)
IF “X%MM%”==”X03” (SET MM=02& SET DD=28& IF %LEAP%==0 SET DD=29)
IF “X%MM%”==”X04” (SET MM=03& SET DD=31)
IF “X%MM%”==”X05” (SET MM=04& SET DD=30)
IF “X%MM%”==”X06” (SET MM=05& SET DD=31)
IF “X%MM%”==”X07” (SET MM=06& SET DD=30)
IF “X%MM%”==”X08” (SET MM=07& SET DD=31)
IF “X%MM%”==”X09” (SET MM=08& SET DD=31)
IF “X%MM%”==”X10” (SET MM=09& SET DD=30)
IF “X%MM%”==”X11” (SET MM=10& SET DD=31)
IF “X%MM%”==”X12” (SET MM=11& SET DD=30)
)

##########前日日付###########
REM 計算結果
ECHO 計算結果 %YY%年 %MM%月 %DD%日
#########################
※ただ表示させているだけなので削除してOK

set filename=%YY%%MM%%DD%.csv などでファイル名を前日の日付でセットできる。

Access 日付データエクスポート、インポート

テーブルを見ると、ちゃんと2016/01/01なのに、データに吐き出すと、2016/01/01 00:00:00なんていう余計なものが付属されて出てきてしまう。そこでクエリーで吐き出すデータをテーブルに吐き出す時に、整形するか、データ入力時に日付型にしないでテキストとして入力するのかを決めればいい。

仮にクエリーで吐き出す時は、エクスポートするテーブルの形式は、日付型でもテキスト型でもOK
だが、日付型の場合は、書式にyyyy-mm-ddを加えないと勝手に変えられてしまう。

そして、クエリにて、式1:Format([Birthday], “yyyy-mm-dd”)とすれば、2016-01-01にてデータが整う。

もしくは、入力時点で、テーブルの形式をテキストにして、固定入力にて、2016-01-01と入力してテキストとしてデータを扱わせる事も可能。

日付型とすると、勝手に判断して、00:00:00なんて付加されるのであろう。

Access 日付込みデータインポート

あるデータをインポートすると、インポートエラーが出て3個くらい勝手にテーブルを作成する。このエラーは、データ型の相違や、主キー、ファイル形式の違い、先頭行の問題などがあるようだ。

今回は、インポートした後に、勝手に作成されたインポートエラーテーブルを自動で削除するもの。

ボタンをクリックしたら、同時に作業を実行させる。

Private Sub 個配指示_Click()
DoCmd.TransferText _
TransferType:=acImportDelim, _
specificationname:=”配達完了実績ファイル インポート定義”, _
TableName:=”インポートHaitasu”, _
FileName:=”D:\shop\finished\haitatsu_” & Format(Now(), “yyyymmdd”) & “00.txt”
Table削除
End Sub

※haitatsu2016012200.txtというファイルを「インポートHaitatsu」テーブルにインポートする場合を想定している。

インポートエラーテーブル削除対応の為、下記のVBAを設置しておく。

Sub Table削除()
Dim DB As DAO.Database
Dim TableLoop As TableDef
Dim strTname As String
Set DB = CurrentDb

For Each TableLoop In DB.TableDefs

strTname = TableLoop.Name

If Right(strTname, 3) = “エラー” Then
DoCmd.DeleteObject acTable, strTname
Exit For
End If

Next TableLoop

End Sub

Access エクスポート時の日付時間のフォーマット

アクセスからcsvファイルをエクスポートした時に、時間フィールドをエクスポートすると、

2016/01/25 00:00:00 のように時間までついてくる。さらに、yyyy-mm-ddの形式にしたいと思っているができなかった。

できるようにするには、まず、csv出力させたいテーブルを普通に選択クエリーを作成して、日付のフォーマットを
Format([日付],”yyyy-mm-dd”)のようにする。かってに、式1: Format([転出解約日],”yyyy-mm-dd”)のような形式に変換されますが、気にせずにそのままに。

そのクエリーをエクスポートかければ、出力させたい形式になる。

LINUX シェルスクリプト内での日付

様々なサイトをみると微妙に表示が違い、その違いで日付の処理ができなかったりする。その内容をここにメモる。

昨日、当日のファイル処理で日付の設定を

YMD=date ‘+%Y%m%d’  このようにした。では、1日前は?ってことで

date --date '1 day ago' +%Y%m%d  が正解。

また、LINUXのディストリビューションによっても表現が違うので注意が必要だ。
また、シェルスクリプト内だと、カンマ?等がでてくるのでこれも複雑で困る。
とにかく、シェルスクリプトないでは、上記のように記載すれば動いてくれた。

ちなみに、5日前なら、date --date '5 day ago' +%Y%m%d とやればいいようだ。
数字だけいじればいいので簡単だね。

LINUX ファイルの結合

フォルダの中に大量にあるCSVファイルを1つのファイルにしたい場合がある。

その場合は、ファイル名が abc123.csv abc234.csv abc345.csvだとすれば、下記のコマンドで一発で結合される。

cat abc*.csv > abc_all.csv

abc_all.csvというファイルにひとまとめした。

また、日付によって日々追加されるデータを毎日追加したい場合は、スクリプトを使う。
abc20160101.csvのような日付が入っているものを、毎日読み込む場合下記のようなスクリプトを毎日動かせば、abc_all.csvに追加されていく。

#!/bin/sh

YMD=date '+%Y%m%d'

cat /home/joy/abc${YMD}2.csv >> /home/joy/abc_All.csv