後者についてはこれらがずれてしまっていると、例えばTIMESTAMP型に内部的に保存されている値は通常UTCで解釈すべき値ですが、JSTとして解釈しないといけない値が入ってしまっているといった事態が発生します
マジだったわー
SQL> desc testtbl;
ID | NAME | TYPE | NULL? |
---|---|---|---|
1 | TESTNO | decimal | NOT NULL |
2 | DTTM | timestamp(3) | NULL |
3 | DT | date | NULL |
4 | TM | time(3) | NULL |
SQL> select * from testtbl;
TESTNO | DTTM | DT | TM |
---|---|---|---|
10 | 2024-05-25 13:45:33.3 +00:00 | 2024-05-26 00:00:00 +00:00 | 14:53:26.600 |
timestamp型のカラムのタイムゾーン情報が +00:00
になってしまっている。この結果をもとに SQL を実行してもマッチしない
UPDATE testtbl SET DTTM = TIMESTAMP '2024-05-25 13:45:34.4+00:00' WHERE TESTNO = 10 AND DTTM = TIMESTAMP '2024-05-25 13:45:33.3+00:00' AND DT = DATE '2024-05-26' AND TM = TIME '14:53:26.6' Execute? [y/n] y Starts a transaction 0 record(s) updated. SQL>
接続文字列に ?parseTime=true&loc=Asia%2FTokyo
みたいに指定するようにしたら、TIMESTAMP の比較も更新用SQLも期待どおり動くようになった。
SQL> select * from testtbl;
TESTNO | DTTM | DT | TM |
---|---|---|---|
10 | 2024-05-25 13:45:33.3 +09:00 | 2024-05-26 00:00:00 +09:00 | 14:53:26.600 |
SQL> UPDATE testtbl 2> SET DTTM = TIMESTAMP '2024-05-25 13:45:34.4+00:00' 3> WHERE TESTNO = 10 4> AND DTTM = TIMESTAMP '2024-05-25 13:45:33.3+09:00' 5> AND DT = DATE '2024-05-26' 6> AND TM = TIME '14:53:26.6' 1 record(s) updated. SQL>
parseTime=true くらいはデフォルトにして、loc も OS の設定を拾ってくれたらいいのになぁ ( OS ごとに違うからしんどいか )