在Oracle中调用年份声明

时间:2014-02-05 13:46:14

标签: sql oracle

我在Oracle数据库课程中,这个问题让我感到非常感激!

列出艺术品名称,价格和新价格。如果艺术品在2010年被收购,新价格比旧价格高5%,比收购的旧价格日期早于2010年10%。

继承了我的尝试:

Select ArtName,price,
CASE 
  WHEN YEAR(DtAcquired) = 2010 THEN (price*.05)+price
  WHEN YEAR(DtAcquired) < 2010 THEN(price*.10)+price 
  Else price
END as NewPrice
from arnadod_Arts;

但是发现YEAR是一个无效的标识符。

2 个答案:

答案 0 :(得分:1)

YEAR是MS-SQL函数,也出现在少数其他DBMS中。

在oracle中,您可以使用TO_CHAR()函数。例如:

TO_CHAR(sysdate,'yyyy')获取该年份的年份。

TO_CHAR(sysdate,'mm')获得2位数的月份。

可以在http://www.techonthenet.com/oracle/functions/to_char.php

找到关于TO_CHAR的完整文档

如果您想将其转换为数字,只需将其包装在TO_NUMBER中即可 TO_NUMBER(TO_CHAR(sysdate,'yyyy'))

答案 1 :(得分:1)

如果DtAcquired属于Date数据类型,您可以使用以下内容:

SELECT ...
   CASE WHEN EXTRACT(YEAR FROM DtAcquired) = 2010
        THEN ...
        ELSE ... END as NewPrice

否则(例如VARCHAR2数据类型):

SELECT ...
   CASE WHEN EXTRACT(YEAR FROM TO_DATE(DtAcquired, 'YYYYMMDD')) = 2010
        THEN ...
        ELSE ... END as NewPrice