我正在试图转换保存在表中的时间戳,但由于某种原因,它返回了相同的日期,或者它给了我一个奇怪的错误:
ORA-01830: date format picture ends before converting entire input string
下面是我尝试过但没有成功的方法:Change_Date
字段的类型是TIMESTAMP(6)
SELECT TO_DATE (Change_Date, 'YYYY-MON-DD') FROM test
,它给了我上面的错误。
SELECT CAST(SYSTIMESTAMP AS DATE) FROM test
格式不变。
SELECT TO_DATE(To_Char(Change_Date)) FROM test
没有变化。
SELECT To_Char(to_date(Change_Date, 'DD-MON-YY')) FROM test
没有运气。
还有其他一些我不记得的技巧,但是它总是返回相同的格式-- 16-DEC-14 07.59.24.097000 AM
我只需要输出日期,例如16-DEC-14
我知道我错过了一个很小的部分,但我找不到。你能推我一下吗?
发布于 2014-12-16 09:23:50
若要截断日期或时间戳值的时间部分,应使用TRUNC函数。默认情况下,它截断时间部分,返回一个午夜时间的日期。
根据您的数据库版本,您可以直接截断时间戳,或者必须先将时间戳转换为日期,例如
TRUNC(Change_Date)
或
TRUNC(CAST(Change_Date as Date))
正如我在评论中提到的,日期没有格式。日期类型的值,就像数字一样,存储在不受地区或格式影响的特定二进制格式中。只有在尝试将日期转换为字符串或将字符串解析为日期时,格式才会起作用。
混淆是因为日期(和数字)有时是隐式转换为字符串,例如为了显示目的,当比较不同类型的值时。在这种情况下,数据库将在进行比较之前使用默认区域设置将一种类型转换为另一种类型。
这种隐式转换导致人们认为日期和数字在没有特定格式的情况下具有特定的格式。
发布于 2014-12-16 09:20:24
SELECT To_Char(Change_Date, 'DD-MON-YY') FROM test
编辑做测试
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
我只需要输出日期,例如16-DEC-14。
16-DEC-14不是日期,而是日期的字符串表示形式
https://stackoverflow.com/questions/27500826
复制相似问题