Table des matières
1、数字函数
3、日期时间函数
附录:关于Decode函数
Maison base de données tutoriel mysql Oracle经常用到的一些函数

Oracle经常用到的一些函数

Jun 07, 2016 pm 03:21 PM
nvl oracle s 函数 数字

1、数字函数 NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的,否则返回string1的,如果两个参数都为NULL ,则返回NULL。示例如下: SQL select NVL(NULL,1) from dual; NVL(NULL,1)----------- 1 SQL select NVL(12,1) from

1、数字函数

NVL( string1, replace_with) :如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。示例如下:

SQL> select NVL(NULL,1)  from dual;
 
NVL(NULL,1)
-----------
          1
 
SQL> select NVL(12,1) from dual;
 
 NVL(12,1)
----------
        12
 
SQL> select NVL('',1) from dual;           -----单引号里没有空格
 
NVL('',1)
---------
1
Copier après la connexion

NVL的扩展- NVL2(E1, E2, E3)

             Oracle在NVL函数的功能上扩展,提供了NVL2函数。  NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,否则返回E2。示例如下: 

SQL> select nvl2(NULL,12,3) from dual;
 
NVL2(NULL,12,3)
---------------
              3
 
SQL> select nvl2(5,12,3) from dual;
 
NVL2(5,12,3)
------------
          12
Copier après la connexion

SIGN(n) :该函数用于检测数字的正负.如果数字n小于0,则函数的返回值位-1;如果数字n的值等于0,则函数的返回值等于0,如果数字n大于0,则函数的返回值等于1.

SQL> select SIGN(-10),SIGN(0),SIGN(5) from dual;
 
 SIGN(-10)    SIGN(0)    SIGN(5)
---------- ---------- ----------
        -1          0          1
Copier après la connexion

 CEIL(n) :该函数用于返回大于等于数字n的最小整数.    

SQL> select  ceil(15),ceil(15.1) from dual;
 
  CEIL(15) CEIL(15.1)
---------- ----------
        15         16
 
Copier après la connexion

FLOOR(n):该函数用于返回小于等于数字n的最大整数。

SQL>  select floor(15),floor(15.1) from dual;
 
 FLOOR(15) FLOOR(15.1)
---------- -----------
        15          15
Copier après la connexion

MOD(m,n) :该函数用于返回两个数字相除后的余数.如果数字n为0,则返回结果为m

SQL> select  mod(10,3) from dual;
 
 MOD(10,3)
----------
         1
SQL> select  mod(10,0) from dual;
 
 MOD(10,0)
----------
        10 
Copier après la connexion

ROUND(n,[m]) :该函数用于执行四舍五入运算;如果省略m,则四舍五入至整数位;如果m是负数,则四舍五入到小数点前m位;如果m是整数,则四舍五入至小数点后m位.示例如下:

SQL> select round(65.698) from dual;
 
ROUND(65.698)
-------------
           66
 
SQL> select round(65.698,1) from dual;
 
ROUND(65.698,1)
---------------
           65.7
 
SQL> select round(65.698,-1) from dual;
 
ROUND(65.698,-1)
----------------
              70
Copier après la connexion

 TRUNC(n,[m]) :该函数用于截取数字。如果省略数字m,则将数字n的小数部分截去;如果数字m是正数,则将数字n截取到小数点后的第m位;如果数字m是负数,则将数字n截取到小数点前m位.示例如下:

SQL> select trunc(65.698) from dual;
 
TRUNC(65.698)
-------------
           65
 
SQL> select trunc(65.698,2) from dual;
 
TRUNC(65.698,2)
---------------
          65.69
 
SQL> select trunc(65.698,1) from dual;
 
TRUNC(65.698,1)
---------------
           65.6
 
SQL> select trunc(65.698,-1) from dual;
 
TRUNC(65.698,-1)
----------------
              60
 
SQL> select trunc(65.698,-2) from dual;
 
TRUNC(65.698,-2)
----------------
               0
Copier après la connexion


2、字符函数

字符函数的输入参数为字符类型,其返回值位字符类型或数字类型。字符函数既可以在SQL语句中使用,也可以在PL/SQL块中使用.

 

TRIM 函数的语法如下:

TRIM([ { { LEADING | TRAILING | BOTH }
      [ trim_character ]
   | trim_character
   }
   FROM
    ]
    trim_source
)
Copier après la connexion

下面的这种情况是用于截取特定的字符串

DECLARE 
     v_source  VARCHAR2(20) :='ABCDGHJHAB';
     v_trim    VARCHAR2(20);
BEGIN
	  v_trim:=trim('A' FROM v_source);
	  dbms_output.put_line(v_trim);
END;	 
Copier après la connexion

下面的情况是去除字符串的行首和行尾的空格 ,为了便于理解,用length函数打印trim截取字符串后的长度:

SQL> select length(trim('   hello  ')) from dual;               ----什么都不写,默认情况下截取两端的空格
 
LENGTH(TRIM('HELLO'))
---------------------
                    5

SQL> select length(trim(leading from ' hello')) from dual;      ------leading 截取字符串前面空格
 
LENGTH(TRIM(LEADINGFROM'HELLO'
------------------------------
                             5 
SQL> select length(trim(trailing from ' hello ')) from dual;    ---trailing  截取字符串后面空格 
 
LENGTH(TRIM(TRAILINGFROM'HELLO
------------------------------
                             6
SQL> select length(trim(both from ' hello ')) from dual;         -----both 截取两端的空格
 
LENGTH(TRIM(BOTHFROM'HELLO'))
-----------------------------
                            5
Copier après la connexion

 

ASCII(char):该函数用于返回字符串首字符的ASCII值,示例如下:

SQL> select ascii('a') "a" ,ascii('A') "A"  from dual;
 
         a          A
---------- ----------
        97         65
 
Copier après la connexion

CHR(char) :该函数用于将ASCII码值转变为字符。示例如下:

SQL> select chr('97') from dual;
 
CHR('97')
---------
a
 
SQL> select chr('56') from dual;
 
CHR('56')
---------
8
Copier après la connexion

CONCAT:该函数用于连接字符串,其作用于连接操作符(||)完全相同。示例如下:

SQL> select concat('Good','Morning') from dual;
 
CONCAT('GOOD','MORNING')
------------------------
GoodMorning
SQL> select 'Good'|| 'Morning' from dual;
 
'GOOD'||'MORNING'
-----------------
GoodMorning

Copier après la connexion

 LENGTH(char):该函数用于返回字符串的长度,如果字符串的类型为CHAR,则其长度包括所有的后缀空格:如果char是null,则返回null。示例如下:

SQL> select length('111') from dual;
 
LENGTH('111')
-------------
            3
 
Copier après la connexion

 

3、日期时间函数

日期时间函数用于处理DATE和TIMESTAMP类型的数据。 除了函数,MONTHS_BETWEEN返回数字值外,其它日志函数均返回DATE类型的数据.Oracle是以7位数字格式来存放日期数据的,包括世纪、年、月、日小时、分钟、秒,并且默认时间显示格式为"DD-MON-YY"。下面详细介绍Oracle所提供的日期时间函数,以及在SQL语句和PL/SQL块中使用这些函数的方法。

ADD_MONTHS(d,n):该函数用于返回特定日期时间 d 之后(或之前)的n个月所对应的日期时间(n为正整数表示之后,n为负整数表示之前).示例如下:

SQL> set serveroutput on;
SQL> 
SQL> DECLARE
  2       v_date DATE;
  3  BEGIN
  4        v_date:=add_months(sysdate,-12);
  5        dbms_output.put_line('当前日期前14个月所对应的日期:'||v_date);
  6  END;
  7  
  8  /
 
当前日期前14个月所对应的日期:05-7月 -12
 
PL/SQL procedure successfully completed
 
Copier après la connexion

TRUNC(d,[fmt]) :该函数用于截取日期时间数据.如果fmt指定年度,则结果为本年度的1月1日;如果fmt指定月,则结果为本月1日。示例如下:

----------月
SQL> select trunc(sysdate,'MONTH') from dual;
 
TRUNC(SYSDATE,'MONTH')
----------------------
2013/7/1
 
SQL> select trunc(sysdate,'mm') from dual;
 
TRUNC(SYSDATE,'MM')
-------------------
2013/7/1

----------年
SQL> select trunc(sysdate,'YY') from dual;
 
TRUNC(SYSDATE,'YY')
-------------------
2013/1/1
 
SQL> select trunc(sysdate,'YEAR') from dual;
 
TRUNC(SYSDATE,'YEAR')
---------------------
2013/1/1
Copier après la connexion


MOTNS_BETWEEN(d1,d2):该函数用于返回d1和d2之间相差的月数.如果d1小于d2,则返回负数;如果d1和d2的天数相同,或都是月底,则返回整数;否则Oracle以每月31天为准来计算结果的小数部分。示例如下:

SQL> select months_between(sysdate,'6-7月-1998') from dual;
 
 MONTHS_BETWEEN(SYSDATE,'6-7月-
------------------------------
                           180
Copier après la connexion


NEXT_DAY(d,char):该函数用于返回指定日期后的第一个工作日(由char指定)所对应的日期。示例如下:

SQL> select next_day(sysdate,'星期日') from dual;
 
NEXT_DAY(SYSDATE,'星期日')
--------------------------
2013/7/7 9:15:51

SQL> select next_day(sysdate,'星期一') from dual;
 
NEXT_DAY(SYSDATE,'星期天')
--------------------------
2013/7/8 9:15:11
Copier après la connexion


4、转换函数

 转换函数用于将数值从一种数值类型转换为另一种数据类型。在某些情况下,Oracle Server会隐含地转换数据类型。但在编写应用程序时,为了防止出现编译错误,如果数据类型不同,那么应该使用转换函数进行类型转换.下面详细介绍Oracle所提供的转换函数,以及在SQL语句和PL/SQL块中使用这些转换函数的方法。

TO_CHAR(data[,fmt[,nls_param]]) :该函数用于将日期值转变为字符串,其中fmt用于指定日期格式,nls_param用于指定nls参数。示例如下:

SQL> select to_char(sysdate,'YYYY-MM-DD') from dual;
 
TO_CHAR(SYSDATE,'YYYY-MM-DD')
-----------------------------
2013-07-06
Copier après la connexion

TO_CHAR(n[,fmt[,nls_param]]):用于将数字值转换为VARCHAR2数据类型.示例如下:

SQL> select to_char(100) from dual;
 
TO_CHAR(100)
------------
100
Copier après la connexion


TO_DATE(char[,fmt[,nls_param]]):该函数用于将符合指定日期的函数转变为DATE类型的数值,示例如下:

SQL> select TO_DATE('01-01-2001','DD-MM-YYYY') from dual;
 
TO_DATE('01-01-2001','DD-MM-YY
------------------------------
2001/1/1
 
SQL> select TO_DATE('2001-01-01','YYYY-MM-DD') from dual;
 
TO_DATE('2001-01-01','YYYY-MM-
------------------------------
2001/1/1
Copier après la connexion



 

附录:关于Decode函数

             DECODE是Oracle公司独家提供的功能,它是一个功能很强的函数。它虽然不是SQL的标准,但对于性能非常有用。到目前,其他的数据库供应商还不能提供类似DECODE的功能,甚至有的数据库的供应商批评Oracle的SQL不标准。实际上,这种批评有些片面或不够水平。就象有些马车制造商抱怨亨利。福特的“马车”不标准一样。

 

1、DECODE 中的if-then-else逻辑

在逻辑编程中,经常用到If – Then –Else 进行逻辑判断。在DECODE的语法中,实际上就是这样的逻辑处理过程。它的语法如下:

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。

需要注意的是,这里的if、then及else 都可以是函数或计算表达式。

 

2 DECODE 的简单例子

Oracle系统中就有许多数据字典是使用decode 思想设计的,比如记录会话信息的V$SESSION数据字典视图就是这样。我们从《Oracle8i/9i Reference》资料中了解到,当用户登录成功后在V$SESSION中就有该用户的相应记录,但用户所进行的命令操作在该视图中只记录命令的代码(0—没有任何操作,2—Insert…),而不是具体的命令关键字。因此,我们需要了解当前各个用户的名字及他们所进行的操作时,要用下面命令才能得到详细的结果:

select sid,serial#,username,
DECODE(command,
0,’None’,
2,’Insert’,
3,’Select’,
6,’Update’,
7,’Delete’,
8,’Drop’,
‘Other’) cmmand
from v$session where username is not null;
Copier après la connexion

3 DECODE实现表的转置

数据库中的表是由列和行构成的一个二维表。一般列在任何数据库中都是有限的数量,而行的变化较大,如果表很大,行的数量可能大上千万行。同一列的不同行可能有不同的值,而且不是预先定义的。

例:住房公积金报表置换实例:

1.各个单位在本地经办行进行开户,开户就是将单位的基本信息和职工信息的进行登记;

2.每月各个单位的会计到经办行交缴本单位的所有职工的住房公积金,系统记录有每个职工的交缴明细并在每条记录上记录有经办行的代码;

3.每月、季、半年及年终都要求将经办行 变为“列”给出个月的明细报表:

经办行:城西区城东区

月份:

2001.01 xxxx1.xx xxxxx2.xx

2001.02 xxxx3.xx xxxxx4.xx

。 。 。 。 。 。

原来的数据顺序是:

城西区2001.01 xxxxx1.xx

城东区2001.01 xxxxx2.xx

城西区2001.02 xxxxx3.xx

城东区2001.02 xxxxx4.xx

住房公积金系统记录职工的每月交缴名细的pay_lst表结构是:

bank_code varchar2(6)NOT NULL, -- 经办行代码

acc_no varchar2(15) not null, -- 单位代码(单位帐号)

emp_acc_no varchar2(20) not null, -- 职工帐号

tran_date date not null, -- 交缴日期

tran_val Number(7,2) not null, -- 交缴额

sys_date date default sysdate, --系统日期

oper_id varchar2(10) --操作员代码

这样的表结构,一般按照将经办行作为行(row)进行统计是很容易的,但是如果希望将经办行变为列(column)这样的格式来输出就有困难。如果用DECODE函数来处理则变得很简单:

我们创建一个视图来对目前的pay_lst表进行查询。将经办行代码变为一些具体的经办行名称即可:

CREATE OR REPLACE VIEW bank_date_lst AS

Select to_char(tran_date,’yyyy .mm’),

SUM( DECODE ( bank_code,’001’, tran_val,0 )) 城西区,

SUM( DECODE ( bank_code,’002’, tran_val,0 )) 城南区,

SUM( DECODE ( bank_code,’003’, tran_val,0 )) 城东区

FROM pay_lst

GROUP BY to_char(tran_date,’yyyy .mm’);

建立视图后,可直接对该视图进行查询就可按照列显示出结果。

简单应用:

如果字段a值为null,则替换为0

decode(a,Null,0,a) a字段如果为null,则替换为0,如果不为null,则为a[1]

 

 

 

 

 

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment vérifier la taille de l'espace de table d'Oracle Comment vérifier la taille de l'espace de table d'Oracle Apr 11, 2025 pm 08:15 PM

Pour interroger la taille de l'espace de table Oracle, suivez les étapes suivantes: Déterminez le nom de l'espace de table en exécutant la requête: sélectionnez Tablespace_name dans dba_tablespaces; Requête la taille de l'espace de table en exécutant la requête: sélectionnez SUM (Bytes) comme total_size, sum (bytes_free) comme disponible_space, sum (bytes) - sum (bytes_free) comme used_space à partir de dba_data_files où tablespace_

Comment importer une base de données Oracle Comment importer une base de données Oracle Apr 11, 2025 pm 08:06 PM

Méthode d'importation de données: 1. Utilisez l'utilitaire SqlLoader: Préparez les fichiers de données, créez des fichiers de contrôle et exécutez SqlLoader; 2. Utilisez l'outil IMP / EXP: les données d'exportation, les données d'importation. Astuce: 1. Chargeur SQL * recommandé pour les ensembles de Big Data; 2. La table cible doit exister et la définition de la colonne correspond; 3. Après l'importation, l'intégrité des données doit être vérifiée.

Comment désinstaller l'installation d'Oracle a échoué Comment désinstaller l'installation d'Oracle a échoué Apr 11, 2025 pm 08:24 PM

Désinstaller la méthode pour la défaillance de l'installation d'Oracle: Fermez le service Oracle, supprimez les fichiers du programme Oracle et les clés de registre, désinstallez les variables d'environnement Oracle et redémarrez l'ordinateur. Si la désinstallation échoue, vous pouvez désinstaller manuellement à l'aide de l'outil Oracle Universal Disinstal.

Comment ajouter des champs de table à Oracle Comment ajouter des champs de table à Oracle Apr 11, 2025 pm 07:30 PM

Utilisez l'instruction ALTER TABLE, la syntaxe spécifique est la suivante: alter table table_name Ajouter Column_name data_type [contrainte-clause]. Où: TABLE_NAME est le nom de la table, Column_name est le nom de champ, DATA_TYPE est le type de données et la clause de contrainte est une contrainte facultative. Exemple: Alter Table Employés Ajouter un e-mail Varchar2 (100) Ajouter un champ de messagerie à la table des employés.

Comment crypter Oracle View Comment crypter Oracle View Apr 11, 2025 pm 08:30 PM

Oracle View Encryption vous permet de crypter les données dans la vue, améliorant ainsi la sécurité des informations sensibles. Les étapes incluent: 1) la création de la clé de cryptage maître (MEK); 2) Création d'une vue cryptée, spécifiant la vue et MEK à crypter; 3) Autoriser les utilisateurs à accéder à la vue cryptée. Comment fonctionnent les vues cryptées: lorsqu'un utilisateur interroge pour une vue cryptée, Oracle utilise MEK pour décrypter les données, garantissant que seuls les utilisateurs autorisés peuvent accéder aux données lisibles.

Comment remettre à nouveau Oracle Comment remettre à nouveau Oracle Apr 11, 2025 pm 07:33 PM

Oracle fournit plusieurs méthodes de requête de déduplication: le mot-clé distinct renvoie une valeur unique pour chaque colonne. Le groupe par clause regroupe les résultats et renvoie une valeur non réactive pour chaque groupe. Le mot-clé unique est utilisé pour créer un index ne contenant que des lignes uniques, et l'interrogation de l'index sera automatiquement déducteur. La fonction ROW_NUMBER () attribue des nombres uniques et filtre les résultats qui contiennent uniquement la ligne 1. La fonction min () ou max () renvoie les valeurs non réactives d'une colonne numérique. L'opérateur intersecte renvoie les valeurs communes des deux ensembles de résultats (pas de doublons).

Comment créer une table dans Oracle Comment créer une table dans Oracle Apr 11, 2025 pm 08:00 PM

La création d'une table Oracle implique les étapes suivantes: Utilisez la syntaxe de la table Create pour spécifier les noms de table, les noms de colonne, les types de données, les contraintes et les valeurs par défaut. Le nom du tableau doit être concis et descriptif et ne doit pas dépasser 30 caractères. Le nom de la colonne doit être descriptif et le type de données spécifie le type de données stocké dans la colonne. La contrainte non nulle garantit que les valeurs nulles ne sont pas autorisées dans la colonne, et la clause par défaut spécifie les valeurs par défaut pour la colonne. Contraintes de clé primaire pour identifier l'enregistrement unique du tableau. La contrainte de clé étrangère spécifie que la colonne du tableau fait référence à la clé primaire dans un autre tableau. Voir la création des élèves de la table de l'échantillon, qui contient des clés primaires, des contraintes uniques et des valeurs par défaut.

Comment résoudre le code brouillé dans Oracle Comment résoudre le code brouillé dans Oracle Apr 11, 2025 pm 10:09 PM

Oracle Bragled Les problèmes peuvent être résolus en vérifiant le jeu de caractères de la base de données pour s'assurer qu'ils correspondent aux données. Définissez le jeu de caractères client pour correspondre à la base de données. Convertir les données ou modifier les jeux de caractères de colonne pour faire correspondre les jeux de caractères de base de données. Utilisez des jeux de caractères Unicode et évitez les jeux de caractères mulabyte. Vérifiez que les paramètres de langue de la base de données et du client sont corrects.

See all articles