上午或下午。录音时的时间格式

时间:2021-07-07 02:14:30

标签: oracle oracle11g oracle10g oracle-sqldeveloper

晚上好,

我需要在表格中记录日期和时间,但格式为(上午或下午),

看到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: am / a.m. 或 pm / p.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.) 我将不胜感激。

***基本信息: la columna tiene el tipo de datos 日期

谢谢,

1 个答案:

答案 0 :(得分:2)

首先,日期不存储为格式化字符串,带有“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');

重点是插入数据。一旦它在表格中,然后在选择数据时使用适当的过滤器(即“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.