 # OCA: Oracle Database 11g Administrator Certified Associate- P4

66
lượt xem
9 ## OCA: Oracle Database 11g Administrator Certified Associate- P4

Mô tả tài liệu

Tham khảo tài liệu 'oca: oracle database 11g administrator certified associate- p4', công nghệ thông tin, cơ sở dữ liệu phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:

Bình luận(0)

## Nội dung Text: OCA: Oracle Database 11g Administrator Certified Associate- P4

1. Using Single-Row Numeric Functions 81 ta b l e 2 . 2 Numeric Function Summary (continued) Function Description ATAN2 Returns the arc tangent; takes two inputs BITAND Returns the result of a bitwise AND on two inputs CEIL Returns the next higher integer COS Returns the cosine COSH Returns the hyperbolic cosine EXP Returns the base of natural logarithms raised to a power FLOOR Returns the next smaller integer LN Returns the natural logarithm LOG Returns the logarithm MOD Returns the modulo (remainder) of a division operation NANVL Returns an alternate number if the value is Not a Number (NaN) for BINARY_FLOAT and BINARY_DOUBLE numbers POWER Returns a number raised to an arbitrary power REMAINDER Returns the remainder in a division operation ROUND Rounds a number SIGN Returns an indicator of sign: negative, positive, or zero SIN Returns the sine SINH Returns the hyperbolic sine SQRT Returns the square root of a number TAN Returns the tangent TANH Returns the hyperbolic tangent TRUNC Truncates a number WIDTH_BUCKET Creates equal-width histograms
2. 82 Chapter 2 N Using Single-Row Functions Numeric Function Descriptions Numeric functions have numeric arguments and return numeric values. The trigonometric functions all operate on radians, not degrees. The numeric functions are arranged in alphabetical order, with descriptions and exam- ples of each one. SIGN, ROUND, and TRUNC are most commonly used numeric functions—pay particular attention to them. FLOOR, CEIL, MOD, and REMAINDER are also important functions that can appear in the test. TRUNC and ROUND functions can take numeric input or a datetime input. These two functions are discussed in the “Using Single-Row Date Functions” section to illustrate their behavior with a datetime datatype input. ABS ABS(n) takes a single argument, where n is a numeric datatype (NUMBER, BINARY_ FLOAT or BINARY_DOUBLE). This function returns the absolute value of n. SELECT ABS(-52) negative, ABS(52) positive FROM dual; NEGATIVE POSITIVE ---------- ---------- 52 52 ACOS ACOS(n) takes a single argument, where n is a numeric datatype between –1 and 1. This function returns the arc cosine of n expressed in radians, accurate to 30 digits of precision. SELECT ACOS(-1) PI, ACOS(0) ACOSZERO, ACOS(.045) ACOS045, ACOS(1) ZERO FROM dual; PI ACOSZERO ACOS045 ZERO ---------- ---------- ---------- ---------- 3.14159265 1.57079633 1.52578113 0 ASIN ASIN(n) takes a single argument, where n is a numeric datatype between –1 and 1. This function returns the arc sine of n expressed in radians, accurate to 30 digits of precision. SELECT ASIN(1) high, ASIN(0) middle, ASIN(-1) low FROM dual;
3. Using Single-Row Numeric Functions 83 HIGH MIDDLE LOW ---------- ---------- ---------- 1.57079633 0 -1.5707963 ATAN ATAN(n) takes a single argument, where n is a numeric datatype. This function returns the arc tangent of n expressed in radians, accurate to 30 digits of precision. SELECT ATAN(9E99) high, ATAN(0) middle, ATAN(-9E99) low FROM dual; HIGH MIDDLE LOW ---------- ---------- ---------- 1.57079633 0 -1.5707963 ATAN2 ATAN2(n1, n2) takes two arguments, where n1 and n2 are numbers. This function returns the arc tangent of n1 and n2 expressed in radians, accurate to 30 digits of precision. ATAN2(n1,n2) is equivalent to ATAN(n1/n2). SELECT ATAN2(9E99,1) high, ATAN2(0,3.1415) middle, ATAN2(-9E99,1) low FROM dual; HIGH MIDDLE LOW ---------- ---------- ---------- 1.57079633 0 -1.5707963 BITAND BITAND(n1, n2) takes two arguments, where n1 and n2 are positive integers or zero. This function performs a bitwise AND operation on the two input values and returns the results, also an integer. It is used to examine bit fields. Here are two examples of BITAND. The first one performs a bitwise AND operation on 6 (binary 0110) and 3 (binary 0011). The result is 2 (binary 0010). Similarly, the bitwise AND between 8 (binary 1000) and 2 (binary 0010) is 0 (0000). SELECT BITAND(6,3) T1, BITAND(8,2) T2 FROM dual; T1 T2 ---------- ---------- 2 0
4. 84 Chapter 2 N Using Single-Row Functions CEIL CEIL(n) takes a single argument, where n is a numeric datatype. This function returns the smallest integer that is greater than or equal to n. CEIL rounds up to a whole number. See also FLOOR. SELECT CEIL(9.8), CEIL(-32.85), CEIL(0), CEIL(5) FROM dual; CEIL(9.8) CEIL(-32.85) CEIL(0) CEIL(5) ---------- ------------ ---------- ---------- 10 -32 0 5 COS COS(n) takes a single argument, where n is a numeric datatype in radians. This function returns the cosine of n, accurate to 36 digits of precision. SELECT COS(-3.14159) FROM dual; COS(-3.14159) ------------- -1 COSH COSH(n) takes a single argument, where n is a numeric datatype. This function returns the hyperbolic cosine of n, accurate to 36 digits of precision. SELECT COSH(1.4) FROM dual; COSH(1.4) ---------- 2.15089847 EXP EXP(n) takes a single argument, where n is a numeric datatype. This function returns e (the base of natural logarithms) raised to the n power, accurate to 36 digits of precision. SELECT EXP(1) “e” FROM dual; e ---------- 2.71828183
5. Using Single-Row Numeric Functions 85 FLOOR FLOOR(n) takes a single argument, where n is a numeric datatype. This function returns the largest integer that is less than or equal to n. FLOOR rounds down to a whole number. See also CEIL. SELECT FLOOR(9.8), FLOOR(-32.85), FLOOR(137) FROM dual; FLOOR(9.8) FLOOR(-32.85) FLOOR(137) ---------- ------------- ---------- 9 -33 137 LN LN(n) takes a single argument, where n is a numeric datatype greater than 0. This function returns the natural logarithm of n, accurate to 36 digits of precision. SELECT LN(2.7) FROM dual; LN(2.7) ---------- .993251773 LOG LOG(n1, n2) takes two arguments, where n1 and n2 are numeric datatypes. This function returns the logarithm base n1 of n2, accurate to 36 digits of precision. SELECT LOG(8,64), LOG(3,27), LOG(2,1024), LOG(2,8) FROM dual; LOG(8,64) LOG(3,27) LOG(2,1024) LOG(2,8) ---------- ---------- ----------- ---------- 2 3 10 3 MOD MOD(n1, n2) takes two arguments, where n1 and n2 are any numeric datatype. This func- tion returns n1 modulo n2, or the remainder of n1 divided by n2. If n1 is negative, the result is negative. The sign of n2 has no effect on the result. If n2 is zero, the result is n1. See also REMAINDER. SELECT MOD(14,5), MOD(8,2.5), MOD(-64,7), MOD(12,0) FROM dual;
6. 86 Chapter 2 N Using Single-Row Functions MOD(14,5) MOD(8,2.5) MOD(-64,7) MOD(12,0) ---------- ---------- ---------- --------- 4 .5 -1 12 NANVL This function is used with BINARY_FLOAT and BINARY_DOUBLE datatype numbers to return an alternate value if the input is NaN. The following example defines the NULL display as ? to show NULL value. The TO_BINARY_ FLOAT function (discussed later in the chapter) is used to convert input to a BINARY_ FLOAT datatype number. SET NULL ? SELECT NANVL(TO_BINARY_FLOAT(‘NaN’), 0) T1, NANVL(TO_BINARY_FLOAT(‘NaN’), NULL) T2 FROM dual; T1 T2 ---------- ---------- 0 ? POWER POWER(n1, n2) takes two arguments, where n1 and n2 are numeric datatypes. This function returns n1 to the n2 power. SELECT POWER(2,10), POWER(3,3), POWER(5,3), POWER(2,-3) FROM dual; POWER(2,10) POWER(3,3) POWER(5,3) POWER(2,-3) ----------- ---------- ---------- ----------- 1024 27 125 .125 REMAINDER REMAINDER(n1, n2) takes two arguments, where n1 and n2 are any numeric datatype. This function returns the remainder of n1 divided by n2. If n1 is negative, the result is negative. The sign of n2 has no effect on the result. If n2 is zero and the datatype of n1 is NUMBER, an error is returned; if the datatype of n1 is BINARY_FLOAT or BINARY_DOUBLE, NaNis returned. See also MOD. SELECT REMAINDER(13,5), REMAINDER(12,5), REMAINDER(12.5, 5) FROM dual;
7. Using Single-Row Numeric Functions 87 REMAINDER(13,5) REMAINDER(12,5) REMAINDER(12.5,5) --------------- --------------- ----------------- -2 2 2.5 The difference between MOD and REMAINDER is that MOD uses the FLOOR function, whereas REMAINDER uses the ROUND function in the formula. If you apply MOD function to the previous example, the results are the same except for the first column: SELECT MOD(13,5), MOD(12,5), MOD(12.5, 5) FROM dual; MOD(13,5) MOD(12,5) MOD(12.5,5) ---------- ---------- ----------- 3 2 2.5 Here is another example of using REMAINDER with a BINARY_FLOAT number, having n2 as zero: SELECT REMAINDER(TO_BINARY_FLOAT(‘13.0’), 0) RBF from dual; RBF ---------- Nan ROUND ROUND(n1 [,n2]) takes two arguments, where n1 is a numeric datatype and n2 is an integer. This function returns n1 rounded to n2 digits of precision to the right of the decimal. If n2 is negative, n1 is rounded to the left of the decimal. If n2 is omitted, the default is zero. This function is similar to TRUNC. SELECT ROUND(123.489), ROUND(123.489, 2), ROUND(123.489, -2), ROUND(1275, -2) FROM dual; ROUND(123.489) ROUND(123.489,2) ROUND(123.489,-2) ROUND(1275,-2) -------------- ---------------- ----------------- -------------- 123 123.49 100 1300
8. 88 Chapter 2 N Using Single-Row Functions SIGN SIGN(n) takes a single argument, where n is a numeric datatype. This function returns –1 if n is negative, 1 if n is positive, and 0 if n is 0. SELECT SIGN(-2.3), SIGN(0), SIGN(47) FROM dual; SIGN(-2.3) SIGN(0) SIGN(47) ---------- ---------- ---------- -1 0 1 SIN SIN(n) takes a single argument, where n is a number in radians. This function returns the sine of n, accurate to 36 digits of precision. SELECT SIN(1.57079) FROM dual; SIN(1.57079) ------------ 1 SINH SINH(n) takes a single argument, where n is a number. This function returns the hyperbolic sine of n, accurate to 36 digits of precision. SELECT SINH(1) FROM dual; SINH(1) ---------- 1.17520119 SQRT SQRT(n) takes a single argument, where n is a numeric datatype. This function returns the square root of n. SELECT SQRT(64), SQRT(49), SQRT(5) FROM dual; SQRT(64) SQRT(49) SQRT(5) ---------- ---------- ---------- 8 7 2.23606798
9. Using Single-Row Numeric Functions 89 TAN TAN(n) takes a single argument, where n is a numeric datatype in radians. This function returns the tangent of n, accurate to 36 digits of precision. SELECT TAN(1.57079633/2) “45_degrees” FROM dual; 45_Degrees ---------- 1 TANH TANH(n) takes a single argument, where n is a numeric datatype. This function returns the hyperbolic tangent of n, accurate to 36 digits of precision. SELECT TANH( ACOS(-1) ) hyp_tan_of_pi FROM dual; HYP_TAN_OF_PI ------------- .996272076 TRUNC TRUNC(n1 [,n2]) takes two arguments, where n1 is a numeric datatype and n2 is an integer. This function returns n1 truncated to n2 digits of precision to the right of the decimal. If n2 is negative, n1 is truncated to the left of the decimal. See also ROUND. SELECT TRUNC(123.489), TRUNC(123.489, 2), TRUNC(123.489, -2), TRUNC(1275, -2) FROM dual; TRUNC(123.489) TRUNC(123.489,2) TRUNC(123.489,-2) TRUNC(1275,-2) -------------- ---------------- ----------------- -------------- 123 123.48 100 1200 WIDTH_BUCKET You can use WIDTH_BUCKET(n1, min_val, max_val, buckets) to build histograms of equal width. The first argument n1 can be an expression of a numeric or datetime datatype. The second and third arguments, min_val and max_val, indicate the end points for the histo- gram’s range. The fourth argument, buckets, indicates the number of buckets.
10. 90 Chapter 2 N Using Single-Row Functions The following example divides the salary into a 10-bucket histogram within the range 2,500 to 11,000. If the salary falls below 2500, it will be in the underflow bucket (bucket 0), and if the salary exceeds 11,000, it will be in the overflow bucket (buckets + 1). SELECT first_name, salary, WIDTH_BUCKET(salary, 2500, 11000, 10) hist FROM employees WHERE first_name like ‘J%’; FIRST_NAME SALARY HIST -------------------- ---------- ---------- Jennifer 4400 3 John 8200 7 Jose Manuel 7800 7 Julia 3200 1 James 2400 0 James 2500 1 Jason 3300 1 John 2700 1 Joshua 2500 1 John 14000 11 Janette 10000 9 Jonathon 8600 8 Jack 8400 7 Jean 3100 1 Julia 3400 2 Jennifer 3600 2 Using Single-Row Date Functions Single-row date functions operate on datetime datatypes. A datetime is a coined word to identify datatypes used to define dates and times. The datetime datatypes in Oracle 11g are DATE, TIMESTAMP, and INTERVAL. Most have one or more date arguments, and most return a datetime value. Date data is stored internally as numbers. The whole-number por- tion is the number of days since January 1, 4712 BC, and the decimal portion is the frac- tion of a day (for example, 0.5=12 hours).
11. Using Single-Row Date Functions 91 Date-Format Conversion National-language support (NLS) parameters and arguments allow you to internationalize your Oracle database system. NLS internationalizations include date representations, char- acter sets, alphabets, and alphabetical ordering. Oracle will implicitly or automatically convert its numeric date data to and from char- acter data using the format model specified with NLS_DATE_FORMAT. The default format is DD-MON-RR (see Table 2.7). You can change this date-format model for each session with the ALTER SESSION SET NLS_DATE_FORMAT command. Here’s an example: SQL> SELECT SYSDATE FROM dual; SYSDATE --------- 31-MAR-08 SQL> ALTER SESSION SET NLS_DATE_FORMAT=’DD-Mon-YYYY HH24:MI:SS’; Session altered. SQL> SELECT SYSDATE FROM dual; SYSDATE -------------------- 31-Mar-2008 10:19:11 This ALTER SESSION command will set the implicit conversion mechanism to display date data in the format specified, such as 12-Dec-2002 15:45:32. This conversion works both ways. If the character string ‘30-Nov-2002 20:30:00’ were inserted, updated, or assigned to a date column or variable, the correct date would be entered. If the format model were DD/MM/YY or MM/DD/YY, there could be some ambiguity in the conversion of some dates, such as 12 April 2000 (04/12/00 or 12/04/00). To avoid problems with implicit conversions, Oracle provides explicit date/character-conversion functions: TO_DATE, TO_CHAR, TO_TIMESTAMP, TO_TIMESTAMP_TZ, TO_DSINTERVAL, and TO_YMINTERVAL. These explicit conversion functions are covered in the “Using Single-Row Conversion Functions” section later in this chapter. Date-Function Overview Table 2.3 summarizes the single-row date functions. I will cover each of these functions in the “Date-Function Descriptions” section.
12. 92 Chapter 2 N Using Single-Row Functions ta b l e 2 . 3 Date-Function Summary Function Description ADD_MONTHS Adds a number of months to a date CURRENT_DATE Returns the current date and time in a DATE datatype CURRENT_TIMESTAMP Returns the current date and time in a TIMESTAMP datatype DBTIMEZONE Returns the database’s time zone EXTRACT Returns a component of a date/time expression FROM_TZ Returns a timestamp with time zone for a given timestamp LAST_DAY Returns the last day of a month LOCALTIMESTAMP Returns the current date and time in the session time zone MONTHS_BETWEEN Returns the number of months between two dates NEW_TIME Returns the date/time in a different time zone NEXT_DAY Returns the next day of a week following a given date ROUND Rounds a date/time SESSIONTIMEZONE Returns the time zone for the current session SYS_EXTRACT_UTC Returns the UTC (GMT) for a timestamp with a time zone SYSDATE Returns the current date and time in the DATE datatype SYSTIMESTAMP Returns the current timestamp in the TIMESTAMP datatype TRUNC Truncates a date to a given granularity TZ_OFFSET Returns the offset from UTC for a time zone name Date-Function Descriptions The date functions are arranged in alphabetical order except the first three, with descrip- tions and examples of each one. SYSDATE, SYSTIMESTAMP, and LOCALTIMESTAMP are used in many examples, and hence I’ll discuss them first.
13. Using Single-Row Date Functions 93 SYSDATE SYSDATE takes no arguments and returns the current date and time to the second for the operating-system host where the database resides. The value is returned in a DATE data- type. The format that the value returned is based on NLS_DATE_FORMAT, which can be altered for the session using the ALTER SESSION SET NLS_DATE_FORMAT command. The for- mat mask for dates and timestamps are discussed later in the chapter. ALTER SESSION SET NLS_DATE_FORMAT=’DD-MON-YYYY HH:MI:SS AM’; Session altered. SELECT SYSDATE FROM dual; SYSDATE ----------------------- 31-MAR-2008 12:00:13 PM SYSDATE is one of the most commonly used Oracle functions. There’s a good chance you’ll see it on the exam. Since the SYSDATE value is returned based on the time of the host server where the database resides, the result will be the same for a user sitting in New York or one in Hong Kong. SYSTIMESTAMP SYSTIMESTAMP takes no arguments and returns a TIMESTAMP WITH TIME ZONE for the current database date and time (the time of the host server where the database resides). The fractional second is returned with six digits of precision. The format of the value returned is based on NLS_TIMESTAMP_TZ_FORMAT, which can be altered for the session using the ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT command. SQL> SELECT SYSDATE, SYSTIMESTAMP FROM dual; SYSDATE SYSTIMESTAMP ------------------------------------- 31-MAR-08 31-MAR-08 12.01.49.280000 PM -05:00 ALTER SESSION SET NLS_DATE_FORMAT=’DD-MON-YYYY HH24:MI:SS’; Session altered.
14. 94 Chapter 2 N Using Single-Row Functions ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT=’YYYY-MON-DD HH:MI:SS.FF TZR’; Session altered. SELECT SYSDATE, SYSTIMESTAMP FROM dual; SYSDATE SYSTIMESTAMP ------------------------------------- 31-MAR-2008 12:09:51 2008-MAR-31 12:09:51.429000 -05:00 LOCALTIMESTAMP LOCALTIMESTAMP([p]) returns the current date and time in the session’s time zone to p digits of precision. p can be 0 to 9 and defaults to 6. This function returns the value in the datatype TIMESTAMP. You can set the client time zone using the ALTER SESSION SET TIME_ZONE command. The following example illustrates LOCALTIMESTAMP and how to change the time zone for the session. The database is in U.S./Central time zone, and the client is in U.S./Eastern time zone. See also CURRENT_TIMESTAMP. SELECT SYSTIMESTAMP, LOCALTIMESTAMP FROM dual; SYSTIMESTAMP LOCALTIMESTAMP ----------------------------------------------------- 31-MAR-08 01.02.49.272000 PM -05:00 31-MAR-08 02.02.49.272000 PM ALTER SESSION SET TIME_ZONE = ‘-8:00’; ADD_MONTHS ADD_MONTHS(d, i) takes two arguments, where d is a date and i is an integer. This function returns the date d plus i months. If i is a decimal number, the database will implicitly con- vert it to an integer by truncating the decimal portion (for example, 3.9 becomes 3). If is the last day of the month or the resulting month has fewer days, then the result is the last day of the resulting month. SELECT SYSDATE, ADD_MONTHS(SYSDATE, -1) PREV_MONTH, ADD_MONTHS(SYSDATE, 12) NEXT_YEAR FROM dual;
15. Using Single-Row Date Functions 95 SYSDATE PREV_MONT NEXT_YEAR --------- --------- --------- 31-MAR-08 29-FEB-08 31-MAR-09 CURRENT_DATE CURRENT_DATE takes no arguments and returns the current date in the Gregorian calendar for the session’s (client) time zone. This function is similar to SYSDATE, whereas SYSDATE returns the current date for the database’s (host’s) time zone. You can set the client time zone using the ALTER SESSION SET TIME_ZONE command. The following example illustrates CURRENT_DATE and how to change the time zone for the session. The database is in U.S./Central time zone, and the client is in U.S./Mountain time zone. ALTER SESSION SET NLS_DATE_FORMAT=’DD-Mon-YYYY HH24:MI:SS’; Session altered. SELECT SYSDATE, CURRENT_DATE FROM dual; SYSDATE CURRENT_DATE -------------------- -------------------- 31-Mar-2008 10:52:34 31-Mar-2008 09:52:35 ALTER SESSION SET TIME_ZONE = ‘US/Eastern’; Session altered. SELECT SYSDATE, CURRENT_DATE FROM dual; SYSDATE CURRENT_DATE -------------------- -------------------- 31-Mar-2008 10:53:46 31-Mar-2008 11:53:47 CURRENT_TIMESTAMP CURRENT_TIMESTAMP([p]) returns the current date and time in the session’s time zone to p dig- its of precision. p can be an integer 0 through 9 and defaults to 6. See also LOCALTIMESTAMP. This function is similar to CURRENT_DATE. CURRENT_DATE returns result in the DATE data- type, whereas CURRENT_TIMESTAMP returns the result in the TIMESTAMP WITH TIME ZONE datatype.
16. 96 Chapter 2 N Using Single-Row Functions SQL> SELECT CURRENT_DATE, CURRENT_TIMESTAMP FROM dual; CURRENT_DATE CURRENT_TIMESTAMP --------------------------------------- 31-Mar-2008 12:23:43 31-MAR-08 12.23.43.305000 PM US/EASTERN DBTIMEZONE DBTIMEZONE returns the database’s time zone, as set by the latest CREATE DATABASE or ALTER DATABASE SET TIME_ZONE statement. Note that after changing the database time zone with the ALTER DATABASE statement, the database must be bounced (restarted) for the change to take effect. The time zone is a character string specifying the hours and minutes offset from UTC (Coordinated Universal Time, also known as GMT, or Greenwich mean time) or a time zone region name. The valid time zone region names can be found in the TZNAME col- umn of the view V$TIMEZONE_NAMES. The default time zone for the database is UTC (00:00) if you do not explicitly set the time zone during database creation. SQL> SELECT DBTIMEZONE FROM dual; DBTIME ------ +00:00 EXTRACT EXTRACT(c FROM dt) extracts and returns the specified component c of date/time or interval expression dt. The valid components are YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_ HOUR, TIMEZONE_MINUTE, TIMEZONE_REGION, and TIMEZONE_ABBR. The specified component must exist in the expression. So, to extract a TIMEZONE_HOUR, the date/time expression must be a TIMESTAMP WITH TIME ZONE datatype. Though HOUR, MINUTE, and SECOND exist in the DATE datatype, you can extract only YEAR, MONTH, and DAY from the DATE dataype expressions. SELECT SYSDATE, EXTRACT(YEAR FROM SYSDATE) year_d FROM dual; SYSDATE YEAR_D -------------------- ---------- 31-MAR-2008 12:29:02 2008 You can extract YEAR, MONTH, DAY, HOUR, MINUTE, and SECOND from the TIMESTAMP datatype expression. You can extract all the components from the TIMESTAMP WITH TIMEZONE datatype expression. 17. Using Single-Row Date Functions 97 SELECT LOCALTIMESTAMP, EXTRACT(YEAR FROM LOCALTIMESTAMP) YEAR_TS, EXTRACT(DAY FROM LOCALTIMESTAMP) DAY_TS, EXTRACT(SECOND FROM LOCALTIMESTAMP) SECOND_TS FROM dual; LOCALTIMESTAMP YEAR_TS DAY_TS SECOND_TS ----------------------------- ------- ------- --------- 31-MAR-08 02.09.32.972000 PM 2008 31 32.972 FROM_TZ FROM_TZ(ts, tz) returns a TIMESTAMP WITH TIME ZONE for the timestamp ts using time zone value tz. The character string tz specifies the hours and minutes offset from UTC or is a time zone region name. The valid time zone region names can be found in the TZNAME column of the view V$TIMEZONE_NAMES. SELECT LOCALTIMESTAMP, FROM_TZ(LOCALTIMESTAMP, ‘Japan’) Japan, FROM_TZ(LOCALTIMESTAMP, ‘-5:00’) Central FROM dual; LOCALTIMESTAMP JAPAN CENTRAL -------------------------------------- 31-MAR-08 03.17.38.447000 PM 31-MAR-08 03.17.38.447000 PM JAPAN 31-MAR-08 03.17.38.447000 PM -05:00 LAST_DAY LAST_DAY(d) takes a single argument, where d is a date. This function returns the last day of the month for the date d. The return datatype is DATE. SELECT SYSDATE, LAST_DAY(SYSDATE) END_OF_MONTH, LAST_DAY(SYSDATE)+1 NEXT_MONTH FROM dual; SYSDATE END_OF_MONTH NEXT_MONTH ----------- ------------ ----------- 09-SEP-2007 30-SEP-2007 01-OCT-2007
18. 98 Chapter 2 N Using Single-Row Functions MONTHS_BETWEEN MONTHS_BETWEEN(d1, d2) takes two arguments, where d1 and d2 are both dates. This func- tion returns the number of months that d2 is later than d1. A whole number is returned if d1 and d2 are the same day of the month or if both dates are the last day of a month. SELECT MONTHS_BETWEEN(‘31-MAR-08’, ‘30-SEP-08’) E1, MONTHS_BETWEEN(‘11-MAR-08’, ‘30-SEP-08’) E2, MONTHS_BETWEEN(‘01-MAR-08’, ‘30-SEP-08’) E3, MONTHS_BETWEEN(‘31-MAR-08’, ‘30-SEP-07’) E4 FROM dual; E1 E2 E3 E4 ---------- ---------- ---------- ---------- -6 -6.6129032 -6.9354839 6 NEW_TIME NEW_TIME(d>, tz1, tz2) takes three arguments, where d is a date and both tz1 and tz2 are one of the time zone constants. This function returns the date in time zone tz2 for date d in time zone tz1. SELECT SYSDATE Dallas, NEW_TIME(SYSDATE, ‘CDT’, ‘HDT’) Hawaii FROM dual; DALLAS HAWAII -------------------- -------------------- 31-MAR-2008 14:34:03 31-MAR-2008 10:34:03 Table 2.4 lists the time zone constraints. ta b l e 2 . 4 Time Zone Constants Code Time Zone GMT Greenwich mean time NST Newfoundland standard time AST Atlantic standard time ADT Atlantic daylight time BST Bering standard time
19. Using Single-Row Date Functions 99 ta b l e 2 . 4 Time Zone Constants (continued) Code Time Zone BDT Bering daylight time CST Central standard time CDT Central daylight time EST Eastern standard time EDT Eastern daylight time MST Mountain standard time MDT Mountain daylight time PST Pacific standard time PDT Pacific daylight time YST Yukon standard time YDT Yukon daylight time HST Hawaii-Alaska standard time HDT Hawaii-Alaska daylight time NEXT_DAY NEXT_DAY(d, dow) takes two arguments, where d is a date and dow is a text string contain- ing the full or abbreviated day of the week in the session’s language. This function returns the next dow following d. The time portion of the return date is the same as the time por- tion of d. SELECT SYSDATE, NEXT_DAY(SYSDATE,’Thu’) NEXT_THU, NEXT_DAY(‘31-OCT-2008’, ‘Tue’) Election_Day FROM dual; SYSDATE NEXT_THU ELECTION_DAY -------------------- -------------------- -------------------- 31-MAR-2008 14:53:54 03-APR-2008 14:53:54 04-NOV-2008 00:00:00
20. 100 Chapter 2 N Using Single-Row Functions ROUND ROUND( [,fmt]) takes two arguments, where d is a date and fmt is a character string containing a date-format string. This function returns d rounded to the granularity speci- fied in fmt. If fmt is omitted, d is rounded to the nearest day. SELECT SYSDATE, ROUND(SYSDATE,’HH24’) ROUND_HOUR, ROUND(SYSDATE) ROUND_DATE, ROUND(SYSDATE,’MM’) NEW_MONTH, ROUND(SYSDATE,’YY’) NEW_YEAR FROM dual; SYSDATE ROUND_HOUR ROUND_DATE NEW_MONTH NEW_YEAR -------------------- -------------------- -------------------- 31-MAR-2008 14:59:58 31-MAR-2008 15:00:00 01-APR-2008 00:00:00 01-APR-2008 00:00:00 01-JAN-2008 00:00:00 SESSIONTIMEZONE SESSIONTIMEZONE takes no arguments and returns the database’s time zone offset as per the last ALTER SESSION statement. SESSIONTIMEZONE will default to DBTIMEZONE if it is not changed with an ALTER SESSION statement. SELECT DBTIMEZONE, SESSIONTIMEZONE FROM dual; DBTIMEZONE SESSIONTIMEZONE ----------- --------------- US/Central -05:00 SYS_EXTRACT_UTC SYS_EXTRACT_UTC(ts) takes a single argument, where ts is a TIMESTAMP WITH TIME ZONE. This function returns the UTC (GMT) time for the timestamp ts. SELECT CURRENT_TIMESTAMP local, SYS_EXTRACT_UTC(CURRENT_TIMESTAMP) GMT FROM dual; LOCAL GMT ----------------------------------------- 31-MAR-08 04.06.53.731000 PM US/EASTERN 31-MAR-08 08.06.53.731000 PM 