たにーの楽しい闘争

日々の気になる事を書いていきます

【SQLServer】ミリ秒を意識する必要性

今日一瞬ひやっとしたのでメモ。

内容

例えば下記のような状況があったとする。
1. DateTimeOffset型のカラムを更新する。
2. 更新後、AzureのServiceBusに更新した時間をメッセージとして送信する。
(メッセージ送信をトリガーとして動く他システムがあり、そのシステムは受け取った更新時間を条件に1のデータをselectしてまた別のシステムに送るようなケース)

こんな状況で例えば1ではミリ秒は捨てて更新、2ではミリ秒を含んで送信、といった実装もし間違ってしてしまえば更新対象のデータが他システムに連携されず問題になってしまう。
上記のようなケースでは両方ともミリ秒で連携する必要がある。

string strDto2 = DateTimeOffset.UtcNow.ToString("o");//正解  

string strDto = DateTimeOffset.UtcNow.ToString();//不正解

実行結果

2020-09-12T15:13:44.3869652+00:00
2020/09/12 15:13:44 +00:00

因みに、SQLServerでは色々と決まり事が複雑なため特に意識して注意する事が必要そう。
DATETIME型はミリ秒の3桁目は丸め込まれてしまったり、
DATETIME型は時間範囲が「00:00:00 から 23:59:59.997」だけど、DateTimeOffsetは「00:00:00 から 23:59:59.9999999」だったり。

参考

www.earthlink.co.jp