Oracle10g oracle数据库中24小时datetime字段中的更新小时数

Oracle10g oracle数据库中24小时datetime字段中的更新小时数,oracle10g,Oracle10g,我正在尝试将datetime字段中的时间更新为 UPDATE table_name SET col_name=to_DATE('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS') WHERE col_name1='rer'; 在db中更新后,输出如下 '04/02/2012 12:12:00' 额外12小时,它在小时字段中添加, 我怎样才能不在“小时”字段中添加额外的12个字符呢?只是猜测一下,用于格式化输出的字符串中可能有错误,“HH24”中

我正在尝试将datetime字段中的时间更新为

UPDATE table_name 
   SET col_name=to_DATE('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS') 
WHERE col_name1='rer';
在db中更新后,输出如下

'04/02/2012 12:12:00'

额外12小时,它在小时字段中添加,
我怎样才能不在“小时”字段中添加额外的12个字符呢?

只是猜测一下,用于格式化输出的字符串中可能有错误,“HH24”中缺少“24”。因为您只有输入的格式字符串,而没有上面列出的输出,所以我不能说是否是这样。这里有一个例子来说明我的意思

问题1:

结果1:

问题2:

结果2:

说清楚一点,我认为解决问题的办法可能是检查select语句中的格式,然后像这样选择数据:

SELECT to_char(col_name,'MM/DD/YYYY HH24:MI:SS') FROM table_name WHERE col_name1='rer';

UPDATE语句是正确的。它不会在日期列中添加任何额外的12。唯一的问题是显示值。日期列不以任何特定格式存储其值,如“MM/DD/YYYY HH24:MI:SS”,它包含二进制数据。当您使用以下语句查询表时:

SELECT col_name FROM table_name
使用会话的NLS_date_格式显示日期,该格式可能为“MM/DD/YYYY HH:MI:SS”。在此格式中,您的日期显示为“04/02/2012 12:12:00”。如果在会话中运行以下语句

ALTER SESSION SET NLS_DATE_FORMAT='MM/DD/YYYY HH24:MI:SS';
然后是你的问题

SELECT col_name FROM table_name
您将看到所需格式的日期。另一种方法是使用

SELECT TO_CHAR(col_name, ''MM/DD/YYYY HH24:MI:SS') FROM table_name

:我不认为情况并非如此,尽管它给出了正确的答案,但在我的示例中,当我尝试使用hh:mi:ss和time 00:12:00执行更新时,它给我的ORA-08149小时必须介于1和12之间,我并不意味着他在update语句中使用了类似hh:mi:ss的格式字符串,我猜他可能在上面没有显示的select语句中使用了它。在这种情况下,他将在他的表中存储正确的时间,但当他使用select和to_字符查看时,它的格式将不正确。我不认为您会在诸如select to_chardateTimeField,'mm/dd/yyyy HH:mi:ss'之类的语句中从tableName:是的,我们在选择时不会出现上述错误,但如他所述,他需要使用时间00:12:00更新该语句,因此,在这种情况下更新失败,并出现上述错误。在我的情况下,HH24:MI:SS为我工作,并获得了预期的结果2012年2月4日00:12:00。我认为这一定与v$parameter data dictionary中的NLS_DATE_FORMAT参数有关。他从未提到在执行更新时出现异常。问题是他的输出看起来是错误的。我只是猜测,也许他对输出的格式设置不正确。如果他在更新中使用了hh24:mi:ss,但在选择中使用了hh:mi:ss,则可以给出所提到的问题。但我同意可能完全是另外一回事。:这就是我的意思,我在写hh:mi:ss时遇到了这个例外。可能你对我说的话理解错误了。无论如何,你需要找到解决办法。你如何显示输出?你使用什么查询?marcin,只是我使用的一个select语句,比如,从tab_name中选择col_name,后跟where条件。Marcin,首先感谢您的回复,即使运行了alter语句,我仍然有相同的日期格式,我尝试了这个->选择日期'03/24/2012 00:30:00','MM/DD/yyyyyy h24:MI:SS',DUAL.。它仍然显示小时为12 only。您使用什么工具来执行这些查询SQL*Plus?PL/SQL开发人员?SQL开发人员?另外
SELECT col_name FROM table_name
ALTER SESSION SET NLS_DATE_FORMAT='MM/DD/YYYY HH24:MI:SS';
SELECT col_name FROM table_name
SELECT TO_CHAR(col_name, ''MM/DD/YYYY HH24:MI:SS') FROM table_name