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
函数。
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
表达式来进行比较。
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
函数时,需要确保输出的格式与被转换的值的数据类型兼容,否则可能会导致错误或无效的结果。
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
函数时,需要确保输入字符串的格式与指定的格式化字符串一致,否则可能会导致错误或无效的结果。
CASE
表达式是 Oracle SQL 中的一种条件表达式,它允许根据不同的条件返回不同的值。在 CASE
表达式中,我们可以使用 WHEN
和 THEN
子句来定义不同的条件和返回结果,同时还可以使用 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
字段的值返回不同的年龄段字符串。
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’。
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 个月。
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
函数会抛出异常。在使用该函数时,请确保字符型数据符合要求的数值格式。
在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',表示男性。
*/