ExcelからVBAを使ってDatetime型のデータをSQL文で更新しようとすると少し迷うところがありますよね。今回はポイントになる文字列で年月日時分秒をどう表すかについてまとめます。
いきなり結論
「SQL文でDateTime型のデータを更新する場合は年月日時分秒のデータを ‘yyyy-MM-dd hh:mm:ss’ の形式で渡します。」
ポイントが分かればいい人はたぶんこれだけでOKですね。
Now()を変換して変数TXT_DATETIMEに代入する例
Dim TXT_DATETIME As String
TXT_DATETIME = “‘” & Format(Now(),”yyyy-mm-dd hh:mm:ss”) & “‘”
シングルクォートは実際のSQL文で付けた方がプログラム的にはシンプルかもしれません。
以下でもう少し詳しい例を記述します。
サンプルのデータ構造
T_TESTというテーブルで動作テストします
CREATE TABLE [dbo].[T_TEST]( [ID] [int] IDENTITY(1,1) NOT NULL, [TEXT1] [nvarchar](50) NULL, [DAYTIME1] [datetime] NULL )
Insert文の例
TEXT1にAAA、DAYTIME1に2019/3/28 1:23:45を挿入する場合
直接SQLを流す
INSERT INTO [dbo].[T_TEST]
([TEXT1]
,[DAYTIME1])
VALUES
(‘AAA’
,‘2019-03-28 01:23:45’)
VBAでの例
TXT_SQLと言う変数にSQL文を入れる場合。(現在時刻)
Dim TXT_SQL As String
TXT_SQL = “INSERT INTO [dbo].[T_TEST] ([TEXT1],[DAYTIME1]) ”
TXT_SQL = TXT_SQL & “([TEXT1],[DAYTIME1]) ”
TXT_SQL = TXT_SQL & “VALUES ”
TXT_SQL = TXT_SQL & “(‘AAA’,'” & Format(Now(),”yyyy-mm-dd hh:mm:ss”) & “‘)”
Update文の例
TEXT1=’AAA’で、DAYTIME1を現在時刻に更新する場合
直接SQLを流す
UPDATE [dbo].[T_TEST]
SET [DAYTIME1] = getdate()
WHERE TEXT1 = ‘AAA’
VBAでの例
TXT_SQLと言う変数にSQL文を入れる場合。
Dim TXT_SQL As String
TXT_SQL = “UPDATE [dbo].[T_TEST] ”
TXT_SQL = TXT_SQL & “SET [DAYTIME1] = getdate() ”
TXT_SQL = TXT_SQL & “WHERE TEXT1 = ‘AAA'”
または
Dim TXT_SQL As String
TXT_SQL = “UPDATE [dbo].[T_TEST] ”
TXT_SQL = TXT_SQL & “SET [DAYTIME1] = ‘” & Format(Now(),”yyyy-mm-dd hh:mm:ss”) & “‘ ”
TXT_SQL = TXT_SQL & “WHERE TEXT1 = ‘AAA'”
まとめ
簡単な例ですが、基本的なところは押さえておきました。
少しでも参考になればと思います。
この記事へのコメントはありません。