Oracle常用函数

目录

  • 2024/1/5
    • 1、nvl
    • 2、decode
    • 3、to_char
    • 4、to_date
    • 5、case
    • 6、substr
  • 2024/1/8
    • 7、add_months
    • 8、to_number
    • 9、mod

2024/1/5

1、nvl

NVL 函数,用于判断一个表达式是否为空,并在表达式为空时返回一个指定的默认值。

下面是 NVL 函数的语法:

NVL(expr1, expr2)

其中,expr1 是要判断是否为空的表达式,expr2 是在 expr1 为空时要返回的默认值。

例如,如果想要检查 DC_PATIENT.BIRTH_DATE 字段是否为空,并在为空时返回一个默认值 ‘N/A’,可以使用以下代码:

NVL(DC_PATIENT.BIRTH_DATE, 'N/A')

这将返回 DC_PATIENT.BIRTH_DATE 字段的值,如果该字段为空,则返回 ‘N/A’。

请注意,NVL 函数可以用于处理各种数据类型,包括日期、字符串、数字等。根据需要,可以将相应的数据类型作为参数传递给 NVL 函数。

2、decode

DECODE 函数,它可以在一个表达式的取值等于某个给定值时返回另一个值,否则返回一个默认值。以下是 DECODE 函数的语法:

DECODE(expr, search1, result1, search2, result2, ..., default)

其中,expr 是要比较的表达式,searchX 是要匹配的值,resultX 是在 expr 等于 searchX 时要返回的值。如果 expr 不等于任何一个 searchX,则返回 default

例如,根据 DC_PATIENT.SEX 字段的值返回男性或女性的字符串,可以使用以下代码:

DECODE(DC_PATIENT.SEX, 'M', '男性', 'F', '女性', '未知')

这将比较 DC_PATIENT.SEX 字段的值是否等于 ‘M’ 或 ‘F’,如果是则分别返回 ‘男性’ 或 ‘女性’,否则返回 ‘未知’。

请注意,如果需要处理大量的比较情况,DECODE 函数可能会变得很复杂而难以维护。在这种情况下,可以考虑使用 CASE 表达式来进行比较。

3、to_char

TO_CHAR 函数,用于将不同类型的数据转换为字符类型。

以下是 TO_CHAR 函数的通用语法:

TO_CHAR(expr, format)

其中,expr 是要进行转换的值或表达式,format 是指定输出格式的字符串。

例如,将一个日期字段 DC_PATIENT.BIRTH_DATE 转换为 ‘YYYY-MM-DD’ 格式的字符串,可以使用以下代码:

TO_CHAR(DC_PATIENT.BIRTH_DATE, 'YYYY-MM-DD')

这将把 DC_PATIENT.BIRTH_DATE 的日期值转换为 ‘YYYY-MM-DD’ 格式的字符串。

另外,TO_CHAR 函数还可以用于将数字或其他数据类型转换为字符类型。可以根据需要选择不同的格式化字符串来控制输出的结果。

请注意,在使用 TO_CHAR 函数时,需要确保输出的格式与被转换的值的数据类型兼容,否则可能会导致错误或无效的结果。

4、to_date

TO_DATE 函数,用于将字符类型的日期或时间值转换为日期数据类型。

以下是 TO_DATE 函数的通用语法:

TO_DATE(expr, format)

其中,expr 是要进行转换的值或表达式,format 是指定输入的日期或时间字符串的格式。

例如,将一个字符串 ‘2022-01-15’ 转换为日期数据类型,可以使用以下代码:

TO_DATE('2022-01-15', 'YYYY-MM-DD')

这将把字符串 ‘2022-01-15’ 转换为日期数据类型。

另外,TO_DATE 函数还可以用于将其他格式的日期或时间字符串转换为日期数据类型。根据需要选择不同的格式化字符串来匹配输入字符串的格式。

请注意,在使用 TO_DATE 函数时,需要确保输入字符串的格式与指定的格式化字符串一致,否则可能会导致错误或无效的结果。

5、case

CASE 表达式是 Oracle SQL 中的一种条件表达式,它允许根据不同的条件返回不同的值。在 CASE 表达式中,我们可以使用 WHENTHEN 子句来定义不同的条件和返回结果,同时还可以使用 ELSE 子句来定义默认值。

以下是 CASE 表达式的通用语法:

CASE expr
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE default_result
END

其中,expr 是要进行比较的表达式,valueX 是要匹配的值,resultX 是在 expr 等于 valueX 时要返回的值。如果 expr 不等于任何一个 valueX,则返回 default_result

例如,根据 DC_PATIENT.SEX 字段的值返回男性或女性的字符串,可以使用以下代码:

CASE DC_PATIENT.SEX 
    WHEN 'M' THEN '男性'
    WHEN 'F' THEN '女性'
    ELSE '未知'
END

另外,当需要处理多个条件时,可以使用 CASE 表达式的扩展写法:

CASE 
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END

其中,conditionX 是一个布尔表达式,resultX 是在 conditionX 为真时返回的结果。

例如,根据 DC_PATIENT.AGE 字段的值返回不同的年龄段,可以使用以下代码:

CASE 
    WHEN DC_PATIENT.AGE < 18 THEN '未成年人'
    WHEN DC_PATIENT.AGE BETWEEN 18 AND 65 THEN '成年人'
    ELSE '老年人'
END

这将根据 DC_PATIENT.AGE 字段的值返回不同的年龄段字符串。

6、substr

SUBSTR 函数是 Oracle SQL 中的一个字符串函数,用于从一个字符串中提取子字符串。

以下是 SUBSTR 函数的通用语法:

SUBSTR(string, start_position, [length])

其中,string 是要提取子串的字符串;start_position 是指定要提取子串的起始位置的数字表达式,起始位置从 1 开始计数;可选的参数 length 是要提取的子串的长度,如果省略该参数,则返回从 start_position 开始到字符串结尾的所有字符。

例如,从字符串 ‘Hello World’ 中提取前 5 个字符,可以使用以下代码:

SUBSTR('Hello World', 1, 5)

这将返回字符串 ‘Hello’。

若只提取从第 7 个字符开始的所有字符,可以使用以下代码:

SUBSTR('Hello World', 7)

这将返回字符串 ‘World’。


2024/1/8

7、add_months

ADD_MONTHS 函数是 Oracle 数据库中用于处理日期加减运算的函数,可以将指定的月数加到日期中或从日期中减去指定的月数。下面是 ADD_MONTHS 函数的语法:

ADD_MONTHS(date, n)

其中,date 表示要进行加减运算的日期值,n 表示要加上或减去的月数(可以是一个正整数或负整数)。

例如,要在 Oracle 中计算当前日期加上 3 个月后的日期,可以使用以下 SQL 语句:

SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL;

这样可以得到一个新的日期,它比当前日期晚 3 个月。

当然,ADD_MONTHS 函数也可以用来减去指定的月数。例如,要在 Oracle 中计算当前日期减去 3 个月后的日期,可以使用以下 SQL 语句:

SELECT ADD_MONTHS(SYSDATE, -3) FROM DUAL;

这样可以得到一个新的日期,它比当前日期早 3 个月。

8、to_number

Oracle中的TO_NUMBER函数用于将字符型数据转换为数值型数据。它的语法如下:

TO_NUMBER(character, [format], [nls_params])

参数说明:

  • character:要转换为数值的字符型数据。
  • format(可选):指定字符型数据的格式模式。
  • nls_params(可选):指定国家语言参数。

示例用法:

  • 将字符型数据转换为整数:
    TO_NUMBER('123')
    
  • 将字符型数据按照特定格式转换为数值:
    TO_NUMBER('1,234.56', '999G999D99', 'NLS_NUMERIC_CHARACTERS = '',.''')
    

需要注意的是,如果无法将字符型数据转换为有效的数值,则TO_NUMBER函数会抛出异常。在使用该函数时,请确保字符型数据符合要求的数值格式。

9、mod

在Oracle中,MOD是一个用于取模运算的函数。它返回两个数相除后的余数。

MOD函数的语法如下:

MOD(dividend, divisor)

参数说明:

  • dividend:被除数。
  • divisor:除数。

示例用法:

SELECT MOD(10, 3) AS result FROM dual;

输出将是:1,因为 10 除以 3 的余数是 1。

MOD函数适用于整数和浮点数之间的运算。

需要注意的是,如果除数为 0,则 Oracle 中的 MOD 函数将返回 NULL。因此,在使用 MOD 函数时,请确保避免除以 0 的情况。

示例:根据身份证号码来确定性别

DECODE(MOD(TO_NUMBER(SUBSTR(ID_CARD,17,1)),2),0,'2','1') AS SEX
/*
	身份证第17为的奇偶代表其性别,奇为帅哥,偶为仙女,
	提取第17位SUB(ID_CARD,17,1)
	判断奇偶对象是数值型数据,而SUBSTR结果为字符型数据,
	使用TO_NUMBER(RESULT)将其转换为数值型数据,
	使用MOD(RESULT1,2)对上述结果取模2的值,
	如果取模结果为0,则返回'2',表示女性;如果取模结果为1,则返回'1',表示男性。
*/

你可能感兴趣的:(SQL,oracle,数据库)