将年、月和日三列转换为单个日期Oracle
我有一个以不同方式保存日期的表,三列,一列表示年,另一列表示月,还有一列表示日。因为我想使用日期比较,所以需要将它们作为日期格式的标准单列。 例如: 想要的结果是日期采用将年、月和日三列转换为单个日期Oracle,oracle,date,type-conversion,Oracle,Date,Type Conversion,我有一个以不同方式保存日期的表,三列,一列表示年,另一列表示月,还有一列表示日。因为我想使用日期比较,所以需要将它们作为日期格式的标准单列。 例如: 想要的结果是日期采用yyyy-mm-dd格式。到目前为止,我已经搜索并找到了一些解决方案,但我无法使它们工作-在Oracle中不工作,第二个是更数学的解决方案: select (2011-1900)*10000 +1*100 +1 (date) from dual; 给出错误:ORA-00936:缺少表达式 我能做些什么来达到预期的结果?如果不使
yyyy-mm-dd
格式。到目前为止,我已经搜索并找到了一些解决方案,但我无法使它们工作-在Oracle中不工作,第二个是更数学的解决方案:
select (2011-1900)*10000 +1*100 +1 (date) from dual;
给出错误:ORA-00936:缺少表达式
我能做些什么来达到预期的结果?如果不使用数学,可能还有其他解决方案吗?您不应该针对日期格式,而应该针对日期类型。格式只是在显示器上显示此类日期的一种方式,但日期类型最容易用于日期计算和比较 因此,假设您的三个列都是字符串类型,并且始终具有填充的零,如示例中所示(即一月为
01
而非1
),您可以执行以下操作:
select to_date(year || month || day, 'YYYYMMDD') from dual
如果列是数字:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual
如果确实需要直接从三个值计算文本格式:
select year || '-' || month || '-' || day from dual
同样,如果列是数字的:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual
您不应以日期格式为目标,而应以日期类型为目标。格式只是在显示器上显示此类日期的一种方式,但日期类型最容易用于日期计算和比较 因此,假设您的三个列都是字符串类型,并且始终具有填充的零,如示例中所示(即一月为
01
而非1
),您可以执行以下操作:
select to_date(year || month || day, 'YYYYMMDD') from dual
如果列是数字:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual
如果确实需要直接从三个值计算文本格式:
select year || '-' || month || '-' || day from dual
同样,如果列是数字的:
select to_date(to_char(year, 'FM0000') || to_char(month, 'FM00')
|| to_char(day, 'FM00'), 'YYYYMMDD') from dual
select to_char(year, 'FM0000') || '-' || to_char(month, 'FM00')
|| '-' || to_char(day, 'FM00') from dual
查找最新功能3列的数据类型是什么?@trincot数据类型是所有3列的数字您应该修复该设计并将该信息直接存储在单个
日期列中。@a_horse_,带有\u no_名称,这不是我的设计)查找最新功能3列的数据类型是什么?@trincot数据类型是数字所有3个你应该修复这个设计,并将信息直接存储在一个DATE
列中。@a_horse_,没有名字,这不是我的设计)FM000 FM00是什么意思?列存储在TO_CHAR
中使用的数字数据格式中,该格式描述了0
格式模型和FM
格式模型修饰符。FM000 FM00的含义是什么?列存储在TO_CHAR
中使用的数字数据格式中,该格式描述了0
格式模型和FM
格式模型修饰符。