SQL - 类型转换函数习题



1. 以下查询的结果是什么?

SELECT ROUND(144.23,-1) FROM dual;
  1. 140
  2. 144
  3. 150
  4. 100

答案:A. ROUND 函数将根据指定的精度 -1 对值 144.23 进行四舍五入,并返回 140。

检查 EMPLOYEES 表的结构(如下所示),并回答接下来的问题 2 和 3。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

2. 你目前位于新泽西州,并已连接到圣迭戈的远程数据库。你发出以下命令。

SELECT ROUND (sysdate-hire_date,0) FROM employees WHERE (sysdate-hire_date)/180 = 2;

此查询的结果是什么?

  1. 错误,因为 ROUND 函数不能与日期参数一起使用。
  2. 错误,因为 WHERE 条件表达式无效。
  3. 自雇员入职以来(基于当前圣迭戈日期和时间)的天数。
  4. 自雇员入职以来(基于当前新泽西州日期和时间)的天数。

答案:C. SYSDATE 函数将获取其远程连接到的数据库的当前时间。你必须执行基本的算术运算来调整时区。

3. 你需要显示名字中包含字母“s”且姓氏第二个位置为字母“t”的员工姓名。哪个查询可以给出所需输出?

  1. SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'s') <> 0 AND SUBSTR(last_name,2,1) = 't';
  2. SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'s') <> '' AND SUBSTR(last_name,2,1) = 't';
  3. SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'e') IS NOT NULL AND SUBSTR(last_name,2,1) = 't';
  4. SELECT first_name, last_name FROM employees WHERE INSTR(first_name,'e') <> 0 AND SUBSTR(last_name,LENGTH(first_name),1) =  
    't';

答案:A. INSTR 函数返回给定字符在所需字符串中的位置。SUBSTR 函数从给定的起始和结束位置返回字符串中的一组字符。

4. 关于 COUNT 函数,以下哪个陈述是正确的?

  1. COUNT (*) 计算任何数据类型列中的重复值和 NULL 值。
  2. COUNT 函数不能与 DATE 数据类型一起使用。
  3. COUNT (DISTINCT job_id) 返回行数,不包括 job_id 列中包含重复值和 NULL 值的行。
  4. 使用 DISTINCT 关键字的 COUNT 函数的 SELECT 语句不能包含 WHERE 子句。

答案:A. COUNT(*) 函数返回满足 SELECT 语句条件的表中行数,包括重复行和任何列中包含 NULL 值的行。如果 SELECT 语句中包含 WHERE 子句,则 COUNT(*) 返回满足 WHERE 子句中条件的行数。相反,COUNT(expr) 返回 expr 指定的列中非 NULL 值的数量。COUNT(DISTINCT expr) 返回 expr 指定的列中唯一非 NULL 值的数量。

5. 在 Oracle 数据库中,以下哪个命令用于计算行数和非 NULL 值的数量?

  1. NOT NULL
  2. INSTR
  3. SUBSTR
  4. COUNT

答案:D. COUNT (ALL column_name) 用于计算不包括 NULL 的行数。类似地,COUNT(*) 用于计算包括 NULL 的列值。

6. 以下查询的结果是什么?

SELECT 100+NULL+999 FROM dual;
  1. 100
  2. 999
  3. NULL
  4. 1099

答案:C. 任何与 NULL 的算术运算都会导致 NULL。

7. 关于单行函数,以下哪些陈述是正确的?

  1. 它们只接受单个参数。
  2. 它们最多只能嵌套两层。
  3. 参数只能是列值或常量。
  4. 它们可以返回与引用的数据类型不同的数据类型值。

答案:D. 单行函数可以接受多个参数,并且返回类型可以与输入的数据类型不同。

8. 以下哪个查询将值 1680 格式化为 $16,80.00?

  1. SELECT TO_CHAR(1680.00,'$99G99D99') FROM dual;
  2. SELECT TO_CHAR(1680.00,'$9,999V99') FROM dual;
  3. SELECT TO_CHAR(1680.00,'$9,999D99') FROM dual;
  4. SELECT TO_CHAR(1680.00,'$99G999D99') FROM dual;

答案:A, D. 格式模型 $99G999D99 将给定数字格式化为数字、组分隔符和小数。其他格式元素可以是前导零、小数位、逗号位置、本地货币、科学记数法和符号。

9. 确定以下查询的输出。

SELECT RPAD(ROUND('78945.45'),10,'*') FROM dual;
  1. 78945*****
  2. **78945.45
  3. RPAD 函数不能与其他函数嵌套。
  4. 78945.45****

答案:A. LPAD(string, num, char) 和 RPAD(string, num, char) 函数在给定字符串的左侧或右侧添加一个字符,直到填充后达到指定的长度 (num)。ROUND 函数将值 78945.45 四舍五入到 78945,然后用 '*' 填充它,直到达到长度 10。

10. 以下哪个命令允许你在 SQL 查询中遇到 NULL 值或非 NULL 值时替换一个值?

  1. NVL
  2. NVLIF
  3. NVL2
  4. LNNVL

答案:C. NVL2 函数至少需要三个参数。NVL2 函数检查第一个表达式。如果它不是 NULL,则 NVL2 函数返回第二个参数。如果第一个参数是 NULL,则返回第三个参数。

11. 以下哪种类型的单行函数不能包含在 Oracle DB 中?

  1. 字符
  2. 数值
  3. 转换
  4. 以上都不是

答案:D. 诸如字符、数值、日期、转换和各种类型的单行函数以及程序员编写的函数都可以包含在 Oracle DB 中。

12. 在以下哪些子句中可以使用单行函数?

  1. SELECT
  2. WHERE
  3. ORDER BY
  4. 以上所有

答案:D. 单行函数可以在 SELECT 语句、WHERE 子句和 ORDER BY 子句中使用。

13. 关于 Oracle DB 中的 NVL 函数,哪个说法是正确的?

  1. NVL 的语法是 NVL (exp1, exp2),其中 exp1 和 exp2 是表达式。
  2. 如果表达式 exp1 为 NULL,则 NVL (exp1, exp2) 将返回 exp2 的值。
  3. 如果 exp1 不为 NULL,则 NVL (exp1, exp2) 将返回表达式 exp2 的值。
  4. 如果表达式 exp2 为 NULL,则 NVL (exp1, exp2) 将返回 exp1。

答案:B. NVL 函数将 NULL 值替换为备用值。日期、字符和数字数据类型的列可以使用 NVL 提供备用值。列及其备用值的数据类型必须匹配。

14. 检查给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

以下查询的结果是什么?

SELECT last_name, NVL(job_id, 'Unknown') 
FROM employees
WHERE last_name LIKE 'A%'
ORDER BY last_name;
  1. 执行时将抛出 ORA 错误。
  2. 它将列出 EMPLOYEES 表中所有员工的 job ID。
  3. 它将列出所有员工的 job ID,并将 NULL job ID 替换为文字“Unknown”。
  4. 它将显示所有员工的姓氏及其 job ID,包括 job ID 中的 NULL 值。

答案:C. NVL 函数将 NULL 值替换为备用值。日期、字符和数字数据类型的列可以使用 NVL 提供备用值。列及其备用值的数据类型必须匹配。

15. 以下查询的结果是什么?

SELECT NVL (NULL,'1') FROM dual;
  1. NULL
  2. 1
  3. 0
  4. 由于无法将 NULL 显式指定给 NVL 函数,因此会报错

答案:B. NVL 将 NULL 视为一个值,并返回备用参数,即 1 作为结果。

16. 以下查询的结果是什么?(考虑给出的 EMPLOYEES 表的结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT employee_id , NVL(salary, 0) FROM employees WHERE first_name like 'P%' ORDER BY first_name;
  1. 它将为所有名字以“P”开头的员工在 salary 列中显示 0。
  2. 它将显示名字以“P”开头的员工的薪水,如果薪水为 NULL,则显示 0。
  3. 它将抛出 ORA 错误,因为 ORDER BY 子句也应该包含 salary 列。
  4. NVL 函数应正确使用为 NVL (0, salary)

答案:B. NVL 函数将 NULL 值替换为备用值。日期、字符和数字数据类型的列可以使用 NVL 提供备用值。列及其备用值的数据类型必须匹配。

17. 关于 NVL 语句,以下哪个陈述是正确的?

SELECT NVL (arg1, arg2) FROM dual;
  1. 两个表达式 arg1 和 arg2 只能采用 VARCHAR2 或 NUMBER 数据类型格式。
  2. 参数 arg1 和 arg2 应该具有相同的数据类型
  3. 如果 arg1 为 VARCHAR2,则 Oracle DB 会在比较它们之前将 arg2 转换为 arg1 的数据类型,并在 arg1 的字符集中返回 VARCHAR2。
  4. NVL 函数不能与 DATE 数据类型的参数一起使用。

答案:C. 如果 arg1 为 VARCHAR2 数据类型,如果 arg2 为 NUMBER 数据类型,则 Oracle 会对 arg2 进行隐式类型转换。在所有其他情况下,这两个参数必须具有相同的数据类型。

18. 以下查询的结果是什么?(考虑给出的 EMPLOYEES 表的结构)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SELECT NVL2(job_id,'Regular Employee','New Joinee') FROM employees;
  1. 它将为所有 job ID 为 NULL 的员工返回“Regular Employee”值。
  2. 它将为所有 job ID 为 NULL 的员工返回“New Joinee”值。
  3. 如果 job ID 为 NULL,它将返回“Regular Employee”。
  4. 执行时将抛出 ORA 错误。

答案:B. NVL2 函数检查第一个表达式。如果第一个表达式不为 NULL,则 NVL2 函数返回第二个表达式。如果第一个表达式为 NULL,则返回第三个表达式。

19. 关于如下所示的语句,以下哪个说法是正确的。

NVL2 (arg1, arg2, arg3)
  1. Arg2 和 Arg3 可以具有任何数据类型
  2. Arg1 不能具有 LONG 数据类型
  3. Oracle 将根据 Arg1 转换 expr2 的数据类型
  4. 如果 Arg2 为 NUMBER,则 Oracle 将确定数字优先级,隐式地将另一个参数转换为该数据类型,并返回该数据类型。

答案:D. 参数 arg2 和 arg3 的数据类型必须兼容,并且不能为 LONG 类型。它们必须具有相同的类型,或者必须能够将 arg3 转换为参数 arg2 的类型。NVL2 函数返回的数据类型与参数 arg2 的数据类型相同。

20. 检查给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

以下提到的查询的结果是什么?

SeLECT first_name, salary, NVL2(commission_pct,  salary + (salary * commission_pct), salary) "Income" 
FROM employees 
WHERE first_name like 'P%'  
ORDER BY first_name;
  1. 如果员工的 Commission 不为 NULL,则返回 Salary。
  2. 如果员工的 Commission 不为 NULL,则返回 Commission_pct。
  3. 如果员工赚取佣金,则返回名字以“P”开头的员工以及 salary+(salary*commission_pct)。
  4. 查询报错是因为在 NVL2 函数中使用了数学表达式。

答案:C。NVL2 函数检查第一个表达式。如果第一个表达式不为空,则 NVL2 函数返回第二个表达式;如果第一个表达式为空,则返回第三个表达式。

21. 关于 Oracle 数据库中的 NULLIF 函数,下列说法正确的是?

  1. 如果两个表达式都不为空,NULLIF(expr1,expr2) 将返回 expr2。
  2. 如果两个表达式都为空,NULLIF(expr1,expr2) 将返回 0。
  3. 如果两个表达式相等,NULLIF(expr1,expr2) 将返回 NULL。
  4. 在 NULLIF(expr1, expr2) 中,Expr1 可以为 NULL。

答案:C。NULLIF 函数测试两个项是否相等。如果相等,则函数返回 NULL,否则返回测试的两个项中的第一个。NULLIF 函数接受两个任意数据类型的必选参数。语法为 NULLIF(arg1,arg2),其中参数 arg1 和 arg2 将进行比较。如果它们相同,则返回 NULL;如果它们不同,则返回 arg1。

22. 选择以下语句的正确答案。

NULLIF (arg1,arg2) 
  1. Arg1 和 Arg2 可以是不同数据类型。
  2. Arg1 和 Arg2 必须相等才能在 NULLIF 函数中使用。
  3. 如果使用 NULLIF,则不会像 NVL 和 NVL2 一样进行内部数据类型转换。
  4. 这相当于 CASE WHEN Arg1 = Arg22 THEN NULL ELSE Arg1 END。

答案:D。

23. 检查给定的 EMPLOYEES 表结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

您需要从 HR 模式创建一个报表,显示自雇佣以来更换过工作的员工。您执行以下查询。

SELECT e.last_name, NULLIF(e.job_id, j.job_id,"Old Job ID")  
FROM employees e, job_history j  
WHERE e.employee_id = j.employee_id  
ORDER BY last_name;

上面给出的查询结果是什么?

  1. 当新的职位 ID 为 NULL 时,它将显示旧的职位 ID。
  2. 它将成功执行并产生所需输出。
  3. 如果新的职位 ID 等于旧的职位 ID,它将显示新的职位 ID。
  4. 执行时将抛出 ORA 错误。

答案:B。

24. 下列哪个不是函数的属性?

  1. 对数据进行计算
  2. 转换列数据类型
  3. 修改单个数据项
  4. 以上都不是

答案:D。函数可以执行计算、执行大小写转换和类型转换。

25. 关于单行函数,最恰当的说法是什么?

  1. 它们不返回值。
  2. 它们每行返回一个结果,并对表的所有行进行操作。
  3. 它们每行返回一个结果,并带有输入参数。
  4. 它们每组行返回一个结果,并对多行进行操作。

答案:B。单行函数始终每行返回一个结果,并且它们仅对单行进行操作;因此,它们被称为“单行”函数。

26. 下列哪一项是 Oracle SQL 函数的一种类型?

  1. 多行函数
  2. 单列函数
  3. 单值函数
  4. 多列函数

答案:A。函数主要分为两种类型:单行函数和多行函数。

27. 下列哪一项是单行函数的一种类型?

  1. VARCHAR2
  2. 字符
  3. LONG
  4. NULLIF

答案:C。字符型、日期型、转换型、通用型、数值型是单行函数的类型。(原文答案B错误,应为NULLIF)

28. 关于多行函数,最恰当的说法是什么?

  1. 它们每行返回多个值。
  2. 它们每组行返回一个结果,可以操作多组行。
  3. 它们每行返回一个结果,可以操作多组行。
  4. 它们每组行返回多个值。

答案:B。多行函数始终作用于一组行,并为每组行返回一个值。

29. 下列哪些也称为组函数?

  1. 单行函数
  2. 多组函数
  3. 多行函数
  4. 单组函数

答案:C。组函数与多行函数和聚合函数相同。

30. 关于单行函数,下列说法正确的是?

  1. 它们可以嵌套。
  2. 它们接受参数并返回多个值。
  3. 它们不能修改数据类型。
  4. 它们不能接受表达式作为参数。

答案:A。单行函数可以嵌套多层。

31. 单行函数接受的参数个数是多少?

  1. 0
  2. 只有 1 个
  3. 只有 2 个
  4. 1 个或多个

答案:D。单行函数可以根据其服务目标接受一个或多个参数。

32. 下列哪一项可以作为单行函数的参数?

  1. 数据类型
  2. SELECT 语句
  3. 表达式
  4. 表名

答案:C。用户提供的常量、变量值、列值和表达式是单行函数的参数类型。

33. 关于字符函数,下列说法正确的是?

  1. 它们只返回字符值。
  2. 它们接受 NUMBER 值。
  3. 它们接受字符参数,并且可以返回字符值和数值。
  4. 它们接受所有数据类型的值。

答案:C。字符函数 INSTR 接受字符串值,但返回字符在字符串中的数字位置。

34. 关于数字函数,下列说法正确的是?

  1. 它们既返回字符值也返回数值。
  2. 它们不能接受表达式作为输入。
  3. 数字函数不能嵌套。
  4. 它们接受数字参数,并且只返回数值。

答案:D。

35. 下列哪一项是 DATE 类型单行函数返回值的例外?

  1. TO_DATE
  2. SYSDATE
  3. MONTHS_BETWEEN
  4. TO_NUMBER

答案:C。所有 DATE 数据类型函数都返回 DATE 作为返回值,除了 MONTHS_BETWEEN 返回一个数字。

36. 下列哪一项不是转换类型单行函数?

  1. TO_CHAR
  2. TO_DATE
  3. NVL
  4. TO_NUMBER

答案:C。(此处缺少选项C,无法翻译) 转换函数将值从一种数据类型转换为另一种数据类型。NVL 函数将空值替换为备用值。

37. 下列哪一项是大小写转换字符函数?

  1. CONCAT
  2. SUBSTR
  3. INITCAP
  4. REPLACE

答案:B。CONCAT、SUBSTR 和 REPLACE 是字符操作字符函数,而 INITCAP、LOWER 和 UPPER 是大小写转换字符函数。

38. 下列查询的结果是什么?

SELECT lower('HI WORLD !!!')  FROM dual;
  1. Hi World !!!
  2. Hi WORLD !!!
  3. hi world !!!
  4. HI WORLD !!!

答案:C。LOWER 函数将字符串转换为小写字符。

39. 下列查询的结果是什么?

SELECT lower(upper(initcap('Hello World') )) FROM dual;
  1. Hello World
  2. HELLO world
  3. hello World
  4. hello world

答案:C。大小写转换字符可以嵌套在 SELECT 查询中。

检查给定的 EMPLOYEES 表结构,并回答以下第 40 至 42 题。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

40. 下列哪个查询的结果与以下查询的结果相同?

SELECT CONCAT(first_name, last_name) FROM employees;
  1. SELECT first_name||last_name FROM employees;
  2. SELECT first_name||' ' || last_name FROM employees;
  3. SELECT last_name||', '||first_name FROM employees;
  4. SELECT first_name||','||last_name FROM employees;

答案:B。CONCAT 函数连接两个字符串,中间没有任何空格。

41. 下列查询的结果是什么?

SELECT 'The job id for '||upper(last_name) ||' is a '||lower(job_id) FROM employees;
  1. ABEL 的职位 ID 是 sa_rep
  2. ABEL 的职位ID是sa_rep
  3. abel 的职位 ID 是 SA_REP
  4. abel 的职位 ID 是 sa_rep

答案:A。

42. 假设 employees 表中员工的姓氏是大写开头的,则以下查询的结果是什么?

SELECT employee_id, last_name, department_id  FROM employees WHERE last_name = 'smith';
  1. 它将显示姓氏为 Smith 的员工的详细信息。
  2. 它将不返回任何结果。
  3. 它将显示姓氏为“smith”(全部小写)的员工的详细信息。
  4. 它将显示姓氏为“Smith”(首字母大写)的员工的详细信息。

答案:B。如果 employees 表中的姓氏是大写开头的,则条件 WHERE last_name = 'smith' 将不满足,因此不会显示任何结果。

43. 关于 Oracle 数据库中的 CONCAT 函数,下列说法正确的是?

  1. 它只能接受字符作为输入。
  2. 它只能有两个输入参数。
  3. 它可以有两个或多个输入参数。
  4. 它默认在连接的字符串之间添加空格来连接值。

答案:B。CONCAT 函数只接受两个 NUMBER 或 VARCHAR2 数据类型的参数。(原文答案B错误,应为A)

44. 关于 Oracle 数据库中的 SUBSTR 函数,下列说法正确的是?

  1. 它提取指定长度的字符串。
  2. 它将字符串的长度显示为数值。
  3. 它查找指定字符的数字位置。
  4. 它修剪字符字符串中一侧(或两侧)的字符。

答案:A。SUBSTR(string, x, y) 函数接受三个参数,并返回一个字符串,该字符串包含从源字符串提取的字符数,从指定的起始位置 (x) 开始。当位置为正时,函数从字符串的开头开始计数以查找第一个字符。当位置为负时,函数从字符串的末尾开始倒着计数。

45. 下列查询的结果是什么?

SELECT length('hi') FROM dual;
  1. 2
  2. 3
  3. 1
  4. hi

答案:A。LENGTH 函数只给出字符串的长度。

46. Oracle 数据库中 LENGTH 和 INSTR 函数的区别是什么?

  1. 当作用于字符串时,它们给出相同的结果。
  2. LENGTH 给出字符串中特定字符的位置。
  3. INSTR 给出字符串中特定字符的位置,而 LENGTH 给出字符串的长度。
  4. LENGTH 和 INSTR 可以互换使用。

答案:C。

47. 检查给定的 EMPLOYEES 表结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

以下查询的结果是什么?

SELECT upper(&jobid) FROM employees;
  1. 由于替换变量不能与单行函数一起使用,因此会导致错误。
  2. 它提示用户在每次执行时输入 jobid,然后以大写形式显示 jobid。
  3. 它按 EMPLOYEES 表中存在的 jobid 显示,没有任何更改。
  4. 它不会要求用户输入 jobid,并将表中的所有 jobid 转换为大写。

答案:B。替换变量可以与 UPPER 和 LOWER 函数一起使用。

48. 关于 Oracle 数据库中的 DUAL 表,下列说法错误的是?

  1. 它由用户 SYS 拥有,所有用户都可以访问。
  2. 它只包含一列和一行。
  3. DUAL 表的 DUMMY 列中的值为“X”。
  4. 当您只想返回一个值时,DUAL 表很有用。

答案:C。DUAL 表有一列名为 DUMMY,只有一行,值为 'X'。

49. 下列查询的结果是什么?

SELECT sysdate+4/12 FROM dual;
  1. 查询产生错误。
  2. 以日期作为结果的日期的小时数。
  3. 忽略 Sysdate 算术运算。
  4. 返回系统日期作为结果。

答案:B。Oracle 数据库中可以对日期进行算术运算。

50. 以下查询的结果是什么?

SELECT lower (100+100) FROM dual;
  1. 100
  2. 100+100
  3. ORA 错误
  4. 200

答案:D。可以在大小写转换函数中指定算术表达式。

51. 如果 SYSDATE = 20-MAY-13,以下查询的结果是什么?

SELECT upper (lower (sysdate)) FROM dual;
  1. 20-may-2013
  2. 由于 LOWER 和 UPPER 无法接受日期值,因此出现 ORA 错误。
  3. 20-MAY-13
  4. 20-May-13

答案:C。UPPER 和 LOWER 函数可以接受日期类型输入,并且会产生与字符串相同的结果。

52. 以下查询的结果是什么?

SELECT INITCAP (24/6) FROM dual;
  1. 4
  2. 24
  3. 24/6
  4. 无结果

答案:A。可以在大小写转换函数中指定算术表达式。

53. 检查此处给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

您需要显示所有以字母“A”开头的员工的姓氏。以下哪个查询将产生所需的结果?

  1. SELECT INITCAP (last_name||' works as a '||job_id "Job Description" FROM employees WHERE initcap (last_name) like 'A%';
  2. SELECT INITCAP (last_name) ||INITCAP(' works as a: ')|| INITCAP(job_id) "Job Description" FROM employees WHERE initcap (last_name) like 'A 
    %';
  3. SELECT INITCAP (last_name||' works as a '||INITCAP(job_id)) "Job Description" FROM employees WHERE initcap (last_name) = 'A';
  4. SELECT UPPER (LOWER (last_name||' works as a '||job_id)) "Job Description" FROM employees WHERE lower (last_name) = 'A';

答案:A,B。

54. 假设 SYSDATE 为 20-FEB-13,以下查询的结果是什么?

SELECT CONCAT ('Today is :', SYSDATE) FROM dual;
  1. 今天是:20-feb-13
  2. 查询抛出不兼容的类型参数错误。
  3. 今天是:20-Feb-13
  4. 今天是:20-FEB-13

答案:D。CONCAT 函数接受所有类型的参数。

55. 以下查询的结果模式是什么?

SELECT CONCAT(first_name, CONCAT (last_name, job_id)) FROM dual;
  1. First_namelast_namejob_id
  2. First_name, last_name, job_id
  3. 错误,因为 CONCAT 无法嵌套
  4. First_namelast_name, job_id

答案:A。CONCAT 函数可以与自身或其他字符函数嵌套。

56. 检查此处给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

您需要生成一份报告,显示 100 部门的全体员工的姓名和薪水。报告应以“Andy Smith earns 50000”的形式显示结果。以下哪个查询将给出所需输出?

  1. SELECT concat (first_name,concat (' ', concat(last_name, concat(' earns ', SALARY)))) Concat_String FROM employees WHERE department_id =  
    100;
  2. SELECT concat (first_name, last_name||' '|| salary) FROM employees WHERE department_id = 100;
  3. SELECT concat (first_name, concat(last_name, ' '))||earns||salary FROM employees WHERE department_id = 100;
  4. SELECT concat (first_name, concat(last_name, 'earns salary') FROM employees WHERE department_id = 100;

答案:A。CONCAT 函数可以与自身或其他字符函数嵌套。

57. 以下查询将显示什么结果?

SELECT LENGTH('It is a lovely day today!') FROM dual;
  1. 25
  2. 19
  3. 20
  4. 0

答案:A。LENGTH 函数也计算空格、制表符和特殊字符。

58. 您需要从 COUNTRIES 表中显示国家名称。国家名称的长度应大于 5 个字符。以下哪个查询将给出所需输出?

  1. SELECT country_name FROM countries WHERE LENGTH (country_name)= 5;
  2. SELECT country_name FROM countries WHERE length (country_name)> 5;
  3. SELECT SUBSTR(country_name, 1,5) FROM countries WHERE length (country_name)< 5;
  4. SELECT country_name FROM countries WHERE length (country_name) <> 5;

答案:B。LENGTH 函数可以在 WHERE 子句中使用。

59. LPAD 函数如何作用于字符串?

  1. 它将字符串与列的左侧对齐
  2. 它返回一个字符串,该字符串用指定数量的字符填充到源字符串的右侧
  3. 它将字符字符串与列的左侧对齐,将数字字符串与列的右侧对齐
  4. 它返回一个字符串,该字符串用指定数量的字符填充到源字符串的左侧

答案:D。LPAD(string, length after padding, padding string) 和 RPAD(string, length after padding, padding string) 函数在字符串的左侧或右侧添加一个填充字符字符串,直到达到指定的填充后长度。

60. 关于 LPAD 和 RPAD 函数,以下哪个选项为真?

  1. 用于填充的字符字符串仅包含字符。
  2. 用于填充的字符字符串仅包含字面量
  3. 用于填充的字符字符串不能包含表达式。
  4. 用于填充的字符字符串包含字面量、字符和表达式。

答案:D。

61. LPAD 和 RPAD 函数的最大输入参数个数是多少?

  1. 1
  2. 2
  3. 3
  4. 0

答案:C。LPAD 和 RPAD 最多接受 3 个参数。如果给出 2 个参数,则填充空格。

62. 以下查询的结果是什么?

SELECT lpad (1000 +300.66, 14, '*') FROM dual;
  1. *******1300.66
  2. 1300*******
  3. 1300.66
  4. ****1300.66

答案:A。为了使总长度为 14 个字符,返回值 1300.66 在左侧用 7 个星号 (*) 填充。

63. 关于 TRIM 函数,哪个说法是正确的?

  1. 它类似于 Oracle 中的 SUBSTR 函数
  2. 它删除字符文本、列或表达式的开头或结尾的字符
  3. TRIM 函数不能应用于表达式和数字
  4. TRIM 函数只能删除字符串两侧的字符。

答案:B。TRIM 函数从给定的源字符串中实际修剪掉前导或尾随(或两者)字符字符串。TRIM 函数后跟 TRAILING 或 LEADING 关键字时,可以删除字符串一侧或两侧的字符。

64. 您需要删除 MAGAZINE 表中书籍标题中字符“.”和双引号“""的出现。

"HUNTING THOREAU IN NEW HAMPSHIRE" THE ETHNIC NEIGHBORHOOD."

以下哪个查询将给出所需结果?

  1. SELECT LTRIM(Title,'"') FROM MAGAZINE;
  2. SELECT LTRIM(RTRIM(Title,'."'),'"') FROM MAGAZINE;
  3. SELECT LTRIM (Title,'"THE') FROM MAGAZINE;
  4. SELECT LTRIM(RTRIM(Title,'."THE'),'"') FROM MAGAZINE;

答案:B。LTRIM 和 RTRIM 函数可以组合使用。

65. 以下查询将返回什么结果?

SELECT INSTR('James','x') FROM dual;
  1. 1
  2. 2
  3. 0
  4. 3

答案:C。当给定字符串中不存在搜索字符串时,INSTR 函数返回 0。

66. 以下查询的结果是什么?

SELECT INSTR('1$3$5$7$9$','$',3,4)FROM dual;
  1. 2
  2. 10
  3. 7
  4. 4

答案:B。INSTR 函数从第 3 个位置开始搜索第 4 个出现的“$”。

67. 以下查询的结果是什么?

SELECT INSTR('1#3#5#7#9#', -3,2) FROM dual;
  1. #5
  2. #3
  3. #7
  4. #9

答案:D。SUBSTR 函数将从字符串末尾开始搜索 3 个位置,并将向前给出 2 个字符,给出 #9。

检查下面给出的 EMPLOYEES 表的结构,并回答接下来的问题 68 和 69。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

68. 您需要根据 EMPLOYEES 表中的 SALARY 列提取一个一致的 15 个字符的字符串。如果 SALARY 值的长度小于 15 个字符,则必须在该值的左侧添加零以产生一个 15 个字符的字符串。哪个查询将满足此要求?

  1. SELECT rpad(salary, 15,0) FROM employees;
  2. SELECT lpad(salary,15,0) FROM employees;
  3. SELECT ltrim(salary,15,0) FROM employees;
  4. SELECT trim(salary,15,0) FROM employees;

答案:B。LPAD 和 RPAD 函数在字符串的左侧或右侧添加一个填充字符字符串,直到达到指定的填充后长度。

69. 您需要从 EMPLOYEES 表的 FIRST_NAME 列中显示最后 2 个字符,而无需使用 LENGTH 函数。以下哪个查询可以满足此要求?

  1. SELECT SUBSTR(first_name, 2) FROM employees;
  2. SELECT SUBSTR(first_name, -2) FROM employees;
  3. SELECT RTRIM(first_name, 2) FROM employees;
  4. SELECT TRIM(first_name, 2) FROM employees;

答案:B。SUBSTR(string, x, y) 函数接受三个参数,并返回一个字符串,该字符串由从源字符串中提取的字符数量组成,从指定的起始位置 (x) 开始。当位置为正时,函数从字符串开头开始计数以查找第一个字符。当位置为负时,函数从字符串末尾反向计数。

70. 假设 SYSDATE 为 13-JUN-13,以下查询的结果是什么?

SELECT SUBSTR(sysdate,10,7) FROM dual;
  1. 3
  2. N-13
  3. 0
  4. NULL

答案:D。查询将给出 NULL,因为 SYSDATE 中从位置 10 开始不存在。

71. 在 Oracle 数据库中,哪个用于替换给定字符串中的特定字符?

  1. LTRIM
  2. TRIM
  3. TRUNC
  4. REPLACE

答案:D。

72. 以下查询的结果是什么?

SELECT replace(9999.00-1,'8',88) FROM dual;
  1. 999
  2. 9998
  3. 99988
  4. 9999.88

答案:C。REPLACE 函数在 9998 中搜索“8”,并将其替换为“88”。

73. 检查此处给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

您需要检索员工的姓名(用空格分隔)和正式姓名,其中姓名和姓名的组合长度超过 15 个字符。正式名称由姓名的第一个字母和姓名的前 14 个字符组成。以下哪个查询将满足此要求?

  1. SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees;
  2. SELECT first_name, last_name ,SUBSTR(first_name, 1,14)||' '||SUBSTR(last_name, 1,1) formal_name FROM employees WHERE length 
    (first_name) + length(last_name) < 15;
  3. SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees WHERE length 
    (first_name) + length(last_name) =15;
  4. SELECT first_name, last_name ,SUBSTR(first_name, 1,1)||' '||SUBSTR(last_name, 1,14) formal_name FROM employees WHERE length 
    (first_name) + length(last_name) > 15;

答案:D。

74. 以下查询的结果是什么?

SELECT round(148.50) FROM dual;
  1. 148.50
  2. 140
  3. 150
  4. 149

答案:D。如果缺少小数精度,则默认舍入度为 0,并且源四舍五入到最接近的整数。

75. 假设 sysdate 为 10-JUN-13,以下查询的结果是什么?

SELECT trunc (sysdate,'mon') FROM dual;
  1. 10-JUN-13
  2. 1-JUN-13
  3. ORA 错误,因为 TRUNC 函数在与日期一起使用时不能包含输入参数。
  4. 31-JUN-13

答案:B。日期被截断到当月的第一天。类似地,它也可以对年份执行此操作。

76. 以下查询的结果是什么?

SELECT trunc(1902.92,-3) FROM dual;
  1. 2000
  2. 1000
  3. 1901
  4. 1901.00

答案:B。

77. Oracle 数据库中 MOD 函数的语法是什么?

  1. Mod(divisor,dividend)
  2. MOD(divisor,1)
  3. MOD(dividend,divisor)
  4. 以上都不是

答案:C。MOD 函数用于获取除法运算的余数。

78. 以下查询的结果是什么?

SELECT mod(100.23,-3) FROM dual;
  1. ORA 错误
  2. 1.23
  3. 100
  4. 0

答案:B。对于正除数和负除数,MOD 函数给出相同的答案

79. 在 Oracle 数据库中,哪些函数用于区分偶数或奇数?

  1. ROUND
  2. TRUNC
  3. MOD
  4. REPLACE

答案:C。MOD 函数可用于检查给定数字是偶数还是奇数。如果 MOD (num,2) 返回零,则数字“num”为偶数。如果 MOD (num,2) 返回 1,则数字“num”为奇数。

80. 检查下面给出的 EMPLOYEES 表的结构。

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)

您需要将前 12 名员工轮流分配到四个团队中的一个。员工 ID 从 100 开始。以下哪个查询将满足此要求?

  1. SELECT * FROM employees WHERE employee_id between 100 and 111 ORDER BY employee_id;
  2. SELECT first_name, last_name, employee_id, mod(employee_id, 4) Team# FROM employees WHERE employee_id between 100 and 111  
    ORDER BY employee_id;
  3. SELECT first_name, last_name,mod(employee_id, 2) Team# FROM employees WHERE employee_ID <> 100;
  4. SELECT first_name, last_name, mod(employee_id, 4) Team# FROM employees WHERE employee_ID = 100;

答案:B。

81. 以下查询的结果是什么?

SELECT SUBSTR('Life is Calling',1) FROM dual;
  1. ORA 错误,因为 SUBSTR 函数至少应有 3 个参数。
  2. Life is Calling
  3. NULL
  4. Life

答案:B。仅使用前两个参数调用 SUBSTR 函数会导致函数从起始位置提取字符串到给定源字符串的末尾。

82. SQL Developer 中 sysdate 的默认数据格式是什么?

  1. DD-MON-YY
  2. DD-MON-RR
  3. DD/MON/RR
  4. DD/MON/YYYY

答案:C。对于 SQL*PLUS,默认日期格式为 DD-MON-RR。

83. 假设 SYSDATE 为 10-JUN-2013 下午 12:05,执行以下查询后返回什么值?

SELECT add_months(sysdate,-1) FROM dual;
  1. 09-MAY-2013 下午 12:05
  2. 10-MAY-2013 下午 12:05
  3. 10-JUL-2013 下午 12:05
  4. 09-JUL-2013 下午 12:05

答案:B。ADD_MONTHS(date, x) 函数将“x”个日历月添加到给定日期。'x' 的值必须是整数,可以为负数。

84. 执行以下语句后将返回什么值?请注意,01-JAN-2013 发生在星期二。

SELECT next_day('01-JAN-2013','friday') FROM dual;
  1. 02-JAN-2013
  2. 星期五
  3. 04-JAN-2013
  4. 以上都不是

答案:C。NEXT_DAY(date,'day') 查找日期后下一个指定的星期几 ('day') 的日期。char 的值可以是表示一天的数字或字符字符串。

85. ROUND 函数最多可以接受多少个参数?

  1. 0
  2. 1
  3. 2
  4. 3

答案:C。如果只有一个参数存在,则舍入到最接近的整数

86. 假设当前日期为 02-JUN-2007,则以 DD-MON-RR 格式返回 24-JUL-2004 日期对应的世纪是多少?

  1. 19
  2. 21
  3. 20
  4. NULL

答案:C。如果当前年份和指定年份的两位数介于 0 和 49 之间,则返回当前世纪。

87. 假设当前日期为 02-JUN-2007,则以 DD-MON-RR 格式返回 24-JUL-94 日期对应的世纪是多少?

  1. 19
  2. 21
  3. 20
  4. NULL

答案:A。如果当前年份的两位数介于 0 和 49 之间,并且指定年份介于 50 和 99 之间,则返回上一个世纪。

88. 假设当前日期为 02-JUN-1975,则以 DD-MON-RR 格式返回 24-JUL-94 日期对应的世纪是多少?

  1. 19
  2. 21
  3. 20
  4. NULL

答案:A。如果当前年份和指定年份的两位数介于 50 和 99 之间,则默认情况下返回当前世纪。

89. 假设当前日期是 1975年6月2日,那么使用 DD-MON-RR 格式表示的 07年7月24日的世纪将返回什么?

  1. 19
  2. 21
  3. 20
  4. NULL

答案:C. 如果当前年份的两位数字介于 50 和 99 之间,并且指定年份介于 0 和 49 之间,则返回下一个世纪。

90. SYSDATE 函数接受多少个参数?

  1. 1
  2. 2
  3. 4
  4. 0

答案:D. SYSDATE 是 Oracle 中的伪列。

91. 关于 Oracle 数据库中的 SYSDATE 函数,以下哪一项是正确的?

  1. 它只返回系统日期
  2. 它至少需要 2 个参数。
  3. 默认格式为 DD-MON-YY
  4. SYSDATE 的默认格式为 DD-MON-RR,它根据数据库服务器返回系统日期和时间。

答案:D。

92. 以下操作的结果数据类型是什么?

"Date3 = Date1-Date2"
  1. 日期
  2. 数字
  3. 0
  4. NULL

答案:B. 两个日期相减的结果是天数。

93. 以下操作的结果数据类型是什么?

"Date2 = Date1-Num1"
  1. 日期
  2. 数字
  3. 0
  4. NULL

答案:A. 从日期值中减去一个数字的结果是日期。

94. 在 Oracle 数据库中,两个日期之间的差表示什么?

  1. 它们之间相隔的天数
  2. 在 Oracle 数据库中无法计算日期差
  3. 一个日期
  4. NULL

答案:A。

95. 以下查询的结果是什么?

SELECT months_between('21-JUN-13','19-JUN-13') FROM dual; 
  1. ORA 错误
  2. 一个正数
  3. 一个负数
  4. 0

答案:C. 如果第一个参数小于第二个参数,则 MONTHS_BETWEEN 返回一个负数。

96. 如果 MONTHS_BETWEEN (start_date,end_date) 函数的结果是一个小数,可以推断出什么?

  1. 它表示开始日期和结束日期之间的数量差。
  2. 结果不能是小数,它必须是整数。
  3. NULL
  4. 它表示计算出年份和月份之间的整数差后剩余的天数和时间,并基于 31 天的月份。

答案:D。

97. 你从印度连接到瑞士的远程数据库。你需要从数据库中查找印度当地时间。以下哪项将给出所需的结果?

  1. SELECT sysdate FROM dual;
  2. SELECT round(sysdate) FROM dual;
  3. SELECT trunc (sysdate) FROM dual;
  4. SELECT current_date FROM dual;

答案:D。

98. 以下查询的结果是什么?

SELECT months_between (to_date ('29-feb-2008'), to_date ('29-feb-2008 12:00:00','dd-mon-yyyy hh24:mi:ss'))*31 FROM dual; 
  1. 大约 0
  2. 1
  3. 查询将抛出 ORA 错误
  4. 0.5 天

答案:D. MONTHS_BETWEEN(date1, date2) 查找 date1 和 date2 之间的月份数。结果可以是正数或负数。如果 date1 晚于 date2,则结果为正;如果 date1 早于 date2,则结果为负。结果的非整数部分表示月份的一部分。

99. 以下查询的结果是什么?

SELECT add_months ('31-dec-2008',2.5) FROM dual; 
  1. 2009年2月31日
  2. 2009年2月28日
  3. 2009年3月31日
  4. 2009年1月15日

答案:B. 将忽略 2.5 的小数部分,并将 2 个月添加到 2012年12月31日,即 2013年2月31日,但由于这不是有效的日期,因此结果是 2009年2月28日。

100. 你需要确定员工将在 11 月份哪一天获得工资。奖金在 11 月份的最后一个星期五支付。以下哪项将满足要求?

  1. SELECT next_day ('30-nov-2012' , 'Friday') FROM dual;
  2. SELECT next_day ('30-nov-2012' , 'Friday') -7 FROM dual;
  3. SELECT last_day ('01-nov-2012' ) FROM dual;
  4. SELECT next_day ('30-nov-2012' , 'sat') -1 FROM dual;

答案:B. NEXT_DAY(date,'day') 和 LAST_DAY (date,'day') 函数查找 date 之后下一个或最后一个指定的星期几 ('day') 的日期。char 的值可以是表示一天的数字或字符字符串。

广告