Examine the structure and data in the PRICE_LIST table:
name Null Type
—— ——— ——-
PROD_ID NOT NULL NUMBER(3)
PROD_PRICE VARCHAR2(10)
PROD_ID PROD_PRICE
———- ————
100 $234.55
101 $6,509.75
102 $1,234
You plan to give a discount of 25% on the product price and need to display the discount amount
in the same format as the PROD_PRICE.
Which SQL statement would give the required result?
A.
SELECT TO_CHAR(prod_price* .25,’$99,999.99′)
FROM PRICE_LIST;
B.
SELECT TO_CHAR(TO_NUMBER(prod_price)* .25,’$99,999.00′)
FROM PRICE_LIST;
C.
SELECT TO_CHAR(TO_NUMBER(prod_price,’$99,999.99′)* .25,’$99,999.00′)
FROM PRICE_LIST;
D.
SELECT TO_NUMBER(TO_NUMBER(prod_price,’$99,999.99′)* .25,’$99,999.00′)
FROM PRICE_LIST;
Explanation:
Use TO_NUMBER on the prod_price column to convert from char to number to be able to multiply
it with 0.25. Then use the TO_CHAR function (with formatting’$99,999.00′) to convert the number
back to char.
Incorrect:
Not C: Use the formatting’$99,999.00′ with the TO_CHAR function, not with the TO_NUMBER
function.
Note:
– Using the TO_CHAR Function
The TO_CHAR function returns an item of data type VARCHAR2. When applied to items of type
NUMBER, several formatting options are available. The syntax is as follows:
TO_CHAR(number1, [format], [nls_parameter]),
The number1 parameter is mandatory and must be a value that either is or can be implicitly
converted into a number. The optional format parameter may be used to specify numeric formatting
information like width, currency symbol, the position of a decimal point, and group (or thousands)
separators and must be enclosed in single
– Syntax of Explicit Data Type Conversion
Functions
TO_NUMBER(char1, [format mask], [nls_parameters]) = num1
TO_CHAR(num1, [format mask], [nls_parameters]) = char1
TO_DATE(char1, [format mask], [nls_parameters]) = date1
TO_CHAR(date1, [format mask], [nls_parameters]) = char1
Correct C.
http://www.aiotestking.com/oracle/examine-the-structure-and-data-in-the-pric-e_list-table-name-null-3/
I don’t think so. Because that statement is error.
The correct answer is a or b.(Both give same results)
Correct is C. Tested:
CREATE TABLE PRICE_LIST (
PROD_ID NUMBER(3) NOT NULL,
PROD_PRICE VARCHAR2(10));
INSERT INTO PRICE_LIST (prod_id,prod_price) VALUES (100,’$234.55′);
INSERT INTO PRICE_LIST (prod_id,prod_price) VALUES (100,’$6,509.75′);
INSERT INTO PRICE_LIST (prod_id,prod_price) VALUES (100,’$1,234′);
COMMIT;
SELECT TO_CHAR(prod_price* .25,’$99,999.99′) FROM PRICE_LIST; — Error: Invalid number
SELECT TO_CHAR(TO_NUMBER(prod_price)* .25,’$99,999.00′) FROM PRICE_LIST; — Error: Invalid number
SELECT TO_CHAR(TO_NUMBER(prod_price,’$99,999.99′)* .25,’$99,999.00′) FROM PRICE_LIST; — Correct
SELECT TO_NUMBER(TO_NUMBER(prod_price,’$99,999.99′)* .25,’$99,999.00′) FROM PRICE_LIST; — Error: Invalid number
DROP TABLE PRICE_LIST;