我在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是一个无效的标识符。
答案 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