a.m 或 p.m。录音时的时间格式

a.m or p.m. time format when recording record

晚上好,

我需要在 table 中记录日期和时间,但格式为 (a.m. or p.m),

看到a和m中间有一个点

我正在尝试:

insert into fechadia (fecha,id )VALUES (to_date('14/05/2021 10:01:45 a.m.','DD/MM/YYYY hh:mi:ss a.m.'),'4')

ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY HH:MI:SS a.m.';

我得到了错误: ORA-01855: 上午 / a.m。或下午/p.m。必要的

如果我删除了点,但它会将记录保存为 AM,而不是 a.m。

 insert into fechadia (fecha,id )VALUES (to_date('14/05/2021 10:01:45 am','DD/MM/YYYY hh:mi:ss a.m.'),'4')

结果: 2021 年 5 月 14 日 10:01:45 上午

期望值: 2021 年 5 月 14 日 10:01:45 a.m。

这个带点的值很重要,因为到达的值是(a.m.) 我将不胜感激任何帮助。

*** 附加信息: la columna tiene el tipo de datos DATE

谢谢,

首先,日期不存储为格式化字符串,带有“a.m”。或“上午”。这些过滤器仅在数据 处理 时应用,以转换为二进制日期数据类型或从二进制日期数据类型转换。此外,由于您在 to_date 函数调用中使用了显式格式过滤器,因此 NLS_DATE_FORMAT 的值无关紧要。

您收到的错误表明您的格式字符串有问题:传入数据的某些内容未正确匹配,但我无法重现它。有些行有可能有不同的格式吗?如果你不能让过滤器以任何其他方式工作,你可以通过删除所有的点来修改文本,因为它被插入到有效的东西中:

-- remove dots from a.m. or p.m.
insert into fechadia (fecha,id) VALUES (to_date(replace('14/05/2021 10:01:45 a.m.','.'),'DD/MM/YYYY hh:mi:ss am'),'4');

重点是插入数据。一旦它在 table 中,那么当您 select 您的数据(即“a.m”)时只需使用适当的过滤器,您应该不会有任何问题:

-- select a date data type and format with a.m.
select to_char(sysdate,'DD/MM/YYYY hh:mi:ss a.m.') from dual;

TO_CHAR(SYSDATE,'DD/MM/YYYYHH:MI:SSA.M.') 
----------------------------------------- 
07/07/2021 03:50:24 a.m.                  

-- convert a string with "pm" to a data data type and back to a formatted string with "p.m."
select to_char(to_date('07/07/2021 10:10:10 pm','DD/MM/YYYY hh:mi:ss am'),'DD/MM/YYYY hh:mi:ss a.m.') from dual;

TO_CHAR(TO_DATE('07/07/202110:10:10PM','DD/MM/YYYYHH:MI:SSAM'),'DD/MM/YYYYHH:MI:SSA.M.') 
---------------------------------------------------------------------------------------- 
07/07/2021 10:10:10 p.m.