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

时间:2012-04-05 10:00:31

标签: oracle10g

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

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中更新后,output就像这样

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

额外12它在小时字段中添加,
我怎样才能使这个不添加额外12到小时字段???

2 个答案:

答案 0 :(得分:3)

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

之类的语句查询表时
SELECT col_name FROM table_name

使用你的会话的NLS_DATE_FORMAT显示日期,这可能是'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

您将看到所需格式的日期。其他方法是使用TO_CHAR,如

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

答案 1 :(得分:0)

只是猜测,用于格式化输出的字符串中可能存在错误,“HH24”中缺少“24”。由于您只有上面列出的输入(而不是输出)的格式字符串,我不能说是否是这种情况。这是我的意思的一个例子。

查询1:

select to_char(to_date('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS'), 
    'mm/dd/yyyy HH24:mi:ss') from dual;

结果1:

04/02/2012 00:12:00

查询2:

select to_char(to_date('04/02/2012 00:12:00','MM/DD/YYYY HH24:MI:SS'), 
    'mm/dd/yyyy HH:mi:ss') from dual;

结果2:

04/02/2012 12:12:00

要清楚,我认为您的问题的解决方案可能是检查您的select语句中的格式,并选择您的数据:

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