Sql 无法将时间戳转换为日期

Sql 无法将时间戳转换为日期,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我试图将保存在表中的时间戳转换为日期,但由于某种原因,它返回相同的日期,或者它给了我一个奇怪的错误: ORA-01830:日期格式图片在转换整个输入字符串之前结束 以下是我尝试过但没有成功的方法: 更改日期字段的类型为TIMESTAMP6 从test中选择TO_DATE Change_DATE,'yyyyy-MON-DD',它会给出上述错误 选择CASTSYSTIMESTAMP作为测试日期,格式不变 从测试中选择TO_DATETo_CharChange_Date no change 从测试无运气

我试图将保存在表中的时间戳转换为日期,但由于某种原因,它返回相同的日期,或者它给了我一个奇怪的错误:

ORA-01830:日期格式图片在转换整个输入字符串之前结束

以下是我尝试过但没有成功的方法: 更改日期字段的类型为TIMESTAMP6

从test中选择TO_DATE Change_DATE,'yyyyy-MON-DD',它会给出上述错误

选择CASTSYSTIMESTAMP作为测试日期,格式不变

从测试中选择TO_DATETo_CharChange_Date no change

从测试无运气中选择更改日期“DD-MON-YY”

还有一些我不记得的技巧,但它总是返回相同的格式-16-DEC-14 07.59.24.097000 AM

我只需要输出日期-例如14年12月16日

我知道我遗漏了一个很小的部分,但我无法发现它。你能推我一下吗

从测试中选择更改日期“DD-MON-YY”

编辑做一个测试

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL;

SYSDATE              CURRENT_TIMESTAMP                   
-------------------- -------------------------------------
16-DEC-2014 10:30:59 16-DEC-2014 10.30.59.608090000 EUROPE/AMSTERDAM                            




SELECT to_char(SYSDATE,'DD-MM-YYYY'), to_char(CURRENT_TIMESTAMP,'DD-MM-YYYY')  FROM DUAL;

TO_CHAR(SYSDATE,'DD-MM-YYYY') TO_CHAR(CURRENT_TIMESTAMP,'DD-MM-YYYY')
----------------------------- ---------------------------------------
16-12-2014                    16-12-2014    
我只需要输出日期-例如14年12月16日

2014年12月16日不是日期,它是日期的字符串表示形式

从测试中选择“DD-MON-YY”更改日期

编辑做一个测试

SELECT SYSDATE, CURRENT_TIMESTAMP  FROM DUAL;

SYSDATE              CURRENT_TIMESTAMP                   
-------------------- -------------------------------------
16-DEC-2014 10:30:59 16-DEC-2014 10.30.59.608090000 EUROPE/AMSTERDAM                            




SELECT to_char(SYSDATE,'DD-MM-YYYY'), to_char(CURRENT_TIMESTAMP,'DD-MM-YYYY')  FROM DUAL;

TO_CHAR(SYSDATE,'DD-MM-YYYY') TO_CHAR(CURRENT_TIMESTAMP,'DD-MM-YYYY')
----------------------------- ---------------------------------------
16-12-2014                    16-12-2014    
我只需要输出日期-例如14年12月16日


14年12月16日不是日期,而是日期的字符串表示形式。要截断日期或时间戳值的时间部分,应使用该函数。默认情况下,它会截断时间部分,返回时间为午夜的日期

根据您的数据库版本,您可以直接截断时间戳,或者您可能必须先将其转换为日期,例如

TRUNC(Change_Date)

正如我在评论中提到的,日期没有格式。日期类型的值和数字一样,以特定的二进制格式存储,不受区域设置或格式的影响。只有当您尝试将日期转换为字符串或将字符串解析为日期时,格式才会起作用

之所以会产生混淆,是因为在比较不同类型的值时,日期和数字有时会被忽略(例如为了显示目的)。在这种情况下,在进行比较之前,数据库将使用默认区域设置从一种类型转换为另一种类型


这种隐式转换会使人们认为日期和数字有特定的格式,而实际上它们没有。

要截断日期或时间戳值的时间部分,应该使用该函数。默认情况下,它会截断时间部分,返回时间为午夜的日期

根据您的数据库版本,您可以直接截断时间戳,或者您可能必须先将其转换为日期,例如

TRUNC(Change_Date)

正如我在评论中提到的,日期没有格式。日期类型的值和数字一样,以特定的二进制格式存储,不受区域设置或格式的影响。只有当您尝试将日期转换为字符串或将字符串解析为日期时,格式才会起作用

之所以会产生混淆,是因为在比较不同类型的值时,日期和数字有时会被忽略(例如为了显示目的)。在这种情况下,在进行比较之前,数据库将使用默认区域设置从一种类型转换为另一种类型


这种隐式转换会使人们认为日期和数字有特定的格式,而实际上它们没有。

改变的是什么?日期自身返回的日期没有格式,因此从一种日期类型转换到另一种日期类型不会改变任何事,除非发生舍入。将日期转换为字符串或将字符串解析为日期使用格式。你帖子中的所有转换都是不必要的。如果出于某种原因希望向客户端返回字符串而不是日期,则只需将日期转换为字符串。您希望输出结果是什么?@Slim您到底想做什么?你是在试图截断时间戳的时间部分吗?@PanagiotisKanavos是的,Panagioti,这正是我想要实现的。改变的是什么?日期通过其自身日期返回没有格式,因此从一种日期类型转换到另一种日期类型不会改变任何东西,除非发生舍入。将日期转换为字符串或将字符串解析为日期使用格式。你帖子中的所有转换都是不必要的。如果出于某种原因希望向客户端返回字符串而不是日期,则只需将日期转换为字符串。您希望输出结果是什么?@Slim您到底想做什么?你想截断时间戳的时间部分吗?@PanagiotisKanavos是的,Panagioti,这正是我想要实现的。没有任何改变。它仍在返回2014年12月16日07.59.24.097000AM@Slim老实说,我觉得这很难相信。你查过罗伯特提供的确切陈述了吗?或者你把它包装在一个额外的转换?此语句永远不会返回时间段。未更改。它仍在返回2014年12月16日07.59.24.097000AM@Slim老实说,我觉得这很难相信。你查过罗伯特提供的确切陈述了吗?还是用a包起来的 加法转换?此语句永远不会返回时间段。