我需要您帮助转换Oracle日期。Oracle - 日期格式
我有一个专门存储日期这样的列20150731 00:00:34.220
。不过,我想显示这样的列像这样20150731
,但是当我运行一个简单的选择语句来测试输出时,我得到以下错误。
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
错误
ORA-01830:转换整个输入串
我需要您帮助转换Oracle日期。Oracle - 日期格式
我有一个专门存储日期这样的列20150731 00:00:34.220
。不过,我想显示这样的列像这样20150731
,但是当我运行一个简单的选择语句来测试输出时,我得到以下错误。
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
错误
ORA-01830:转换整个输入串
此查询
select TO_DATE('20150731 00:00:34.550','YYYYMMDD')
from dual
导致错误
ORA-01830:日期格式图象结束转换整个输入串
因为你传递字符串长度22个字符之前,但同时你传递8个字符的日期格式,这显然不符合字符串。你应该写查询作为
select to_timestamp('20150731 00:00:34.550','yyyymmdd hh24:mi:ss.ff3')
from dual
至于你的表,因为你有varchar2
列的日期,你必须要对表的内容服务。查询需要执行源字符串和日期格式的匹配。
如果你想显示不受时间只有日期,你不需要处理此字符串作为日期,你可以只
select substr('20150731 00:00:34.550', 1, 8)
from dual
是正被存储在Oracle日期时间列之前的日期格式图象结束?否则,您可能需要进行一些操作才能将其变为DD-MON-YYYY格式。如果它以文本字符串形式存储,则可以使用SUBSTR(Date_field, Start_Position, Length)
来获取前8个字符。看看这个链接SUBSTR
如果列是一个varchar,你需要的日期输出:
select TO_DATE(substr('20150731 00:00:34.550', 1, 8),'YYYYMMDD') from dual
如果它的日期格式,你需要一个字符串输出:
select to_char(your_column, 'YYYYMMDD') from your_table
什么是列的数据类型?如果它是DATE
(因为它应该是),那么它不会以您说的格式存储。它以一种内部二进制格式存储。您将/应该使用to_char函数以您选择的任何格式显示它。如果不使用to_char函数,它将以NLS_DATE_FORMAT
指定的格式显示,格式可以在多个位置指定。
至于你的例子,你传递了一个字符串格式的yyyymmd hh:mi:ss.fff',但是你提供了一个只有YYYYMMDD
的描述掩码。它不知道如何处理时间分量。除此之外,当你使用SELECT TO_DATE
时,oracle还必须执行暗示TO_CHAR
将其转换回字符串以进行显示。
另外,您为to_date提供了一个包含秒的小数部分的字符串。 A DATE
数据类型仅解析为秒。如果您需要小数秒,则需要使用TIMESTAMP
,而不是DATE
。
上,你没有试图改变该列中的值,而只是试图证明它在YYYYMMDD
格式的假设工作 -
正如a_horse_with_no_name提到的,你只需要转换它到一个字符串。在这个例子中我用SYSTIMESTAMP作为我的约会:
SELECT TO_CHAR(systimestamp,'YYYYMMDD') FROM DUAL
结果:
20160121
这应该给你你想要显示的YYYYMMDD
格式。
嗨 - 列的数据类型是VARCHAR2。 – netraider
“**存储**这样的日期......”如果它存储的数据不是日期列,但是您可能会混淆日期的默认显示方式以便如何存储它们 - 哪些不是真正。 Oracle中的实际日期存储为代表不同时间单位的整数集。该数值数据通过db默认值或通过to_char()的有意操作转换为可读格式。如果数据存储为varchar,那么请明确说明。 –
然后所有你需要的是** substr(that_column_here,1,8)**除非我错过了什么 –