oracle 用于检查给定日期是否等于忽略毫秒存储的日期的SQL查询

1mrurvl1  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(127)

我有一个日期列,它以GMT时区格式存储日期

  • '年-月-日时.分:秒.毫秒上午/下午,例如2022年11月3日上午10时23分31秒007000000*。

我被提供了一个日期,我想编写一个查询来检查给定的日期是否等于表中存储的日期,但我想忽略毫秒。我想确保这些日期在同一时区(GMT)。这样做是为了检查日期是否已经存在,并防止重复的日期插入,尽管忽略了毫秒部分。enter code here如果不存在具有该日期的记录,我将使用条件有条件地插入记录

Insert into table_name (col1, col2, col3, col4, col5, col6, col7)
SELECT ?,?,?,?,?,?,? from dual
where 0 = (select count(*) from table_name where strat_time = ?);
xdnvmnnf

xdnvmnnf1#

您 可以 截断 时间 戳 ( 小 到 分钟 ;秒 将 不 起 作用 - 看看 这 是否 足够 ) , 或者 您 可以 将 timestamp 转换 为 date ( 它 将 下降 到 秒 ) 。
例如 :
( 设置 环境 - 您 不必 这样 做 )

SQL> alter session set nls_timestamp_format = 'dd.mm.yyyy hh24:mi:ss.ff6';

Session altered.

SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:Mi:ss';

Session altered.

中 的 每 一 个
比较 :

SQL> select systimestamp,
  2         trunc(systimestamp, 'mi') truncated,
  3         cast(systimestamp as date) as_date
  4  from dual;

SYSTIMESTAMP                        TRUNCATED           AS_DATE
----------------------------------- ------------------- -------------------
06-NOV-22 07.28.52.110000 PM +01:00 06.11.2022 19:28:00 06.11.2022 19:28:52

SQL>

格式
在 您 的 情况 下 , 您 可以

insert into table_name ...
select ...
from dual
where not exists (select null 
                  from table_name
                  where cast(start_timestamp as date) = cast(:timestamp_value, as date)
                 );

格式

rmbxnbpk

rmbxnbpk2#

使用MERGE语句并匹配1秒宽的范围:

MERGE INTO table_name dst
USING (SELECT ? AS dt FROM DUAL) src
ON src.dt <= dst.start_time AND dst.start_time < src.dt + INTERVAL '1' SECOND
WHEN NOT MATCHED THEN
  INSERT (col1, col2, col3, col4, col5, col6, col7)
  VALUES (?,    ?,    ?,    ?,    ?,    ?,    ?);

相关问题