1. 程式人生 > >sql幾個常用函式

sql幾個常用函式

 

Oracle:(百度百科查詢整理)
1,ROUND()函式為四捨五入函式
   Round(number,[decimals]
   number 待做四捨五入處理的數值
   decimals 指明需保留小數點後面的位數。可選項,忽略它則保留0位小數,精確到個位;為負數,表示為小數點左邊四捨五入處理。
   如:ROUND(123.123) ROUND(123.123,2) ROUND(123.16,2) ROUND(123.14,-2) ROUND(163.14,-2)
               123               123.12           123.16               100                 200
               
2,NVL()函式判空
   NVL(E1, E2)的功能為:如果E1為NULL,則函式返回E2,否則返回E1本身。但此函式有一定侷限,所以就有了NVL2函式。
   拓展:NVL2函式:Oracle/PLSQL中的一個函式,Oracle在NVL函式的功能上擴充套件,提供了NVL2函式。NVL2(E1, E2, E3)的功能為:
         如果E1為NULL,則函式返回E3,若E1不為null,則返回E2。
   nvl函式可以作用的資料型別:字元型別,日期型別。
   
3,to_timestamp()
    入參: time----BIGING型別,單位為毫秒 ; date----VARCHAR型別,預設格式為yyyy-MM-dd HH:mm:ss
           format----VARCHAR型別,指定輸入日期的格式
    功能描述:將BIGINT型別的日期或者VARCHAR型別的日期轉換成TIMESTAMP型別
     示例
    測試資料
        timestamp1(bigint)    timestamp2(VARCHAR)     timestamp3(VARCHAR)
          1513135677000        2017-09-15 00:00:00          20170915000000
    測試案例
        SELECT  TO_TIMESTAMP(timestamp1) as var1,
                TO_TIMESTAMP(timestamp2) as var2, 
                TO_TIMESTAMP(timestamp3, 'yyyyMMddHHmmss') as var3
        FROM T1
    測試結果
        var1(TIMESTAMP)             var2(TIMESTAMP)                var3(TIMESTAMP)
    2017-12-13 03:27:57.0      2017-09-15 00:00:00.0         2017-09-15 00:00:00.0
    
    (to_timestamp與to_date函式的區別
      date型別是Oracle常用的日期型變數,時間間隔是秒。兩個日期型相減得到是兩個時間的間隔,注意單位是“天”。
      timestamp是DATE型別的擴充套件,可以精確到小數秒(fractional_seconds_precision),可以是 0to9,預設是6。兩個timestamp相減的話,不能直接的得到天數,而是得到,多少天,多少小時,多少秒等。
      舉例如下:
      to_date:
      select to_date('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual;
      結果:113.307789351862

      to_timestamp:
      select to_timestamp('2016-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual;
      結果:+000000113 07:23:12 743000000
       )
    
4,to_char()
      函式功能,就是將數值型或者日期型轉化為字元型。
      如:to_char(timestamp, text)
          把 timestamp 轉換成 string
          to_char(timestamp 'now','HH12:MI:SS')

5,LPAD()函式------------RPAD()是從右到左填充

     lpad函式是Oracle資料庫函式,lpad函式從左邊對字串使用指定的字元進行填充。從其字面意思也可以理解,l是left的簡寫,
      pad是填充的意思,所以lpad就是從左邊填充的意思。
      LPAD((select (nvl(max(substr(id,9)),0)+1) from MARKETING_BUILDING_REF),4,'0') -----設定一個id號
      語法格式如下:
      語法格式如下:
      lpad( string, padded_length, [ pad_string ] )
        string
        準備被填充的字串;
        padded_length
        填充之後的字串長度,也就是該函式返回的字串長度,如果這個數量比原字串的長度要短,lpad函式將會把字串擷取成從左到右的n個字元;
        pad_string
        填充字串,是個可選引數,這個字串是要貼上到string的左邊,如果這個引數未寫,lpad函式將會在string的左邊貼上空格。
   

6,bigDecimal():函式
  Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。
  雙精度浮點型變數double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。
  float和double只能用來做科學計算或者是工程計算,在商業計算中要用java.math.BigDecimal。
  BigDecimal所建立的是物件,我們不能使用傳統的+、-、*、/等算術運算子直接對其物件進行數學運算,
  而必須呼叫其相對應的方法。方法中的引數也必須是BigDecimal的物件。構造器是類的特殊方法,專門用來建立物件,特別是帶有引數的物件
  BigDecimal一共有4個構造方法:
  BigDecimal(int) 建立一個具有引數所指定整數值的物件。
  BigDecimal(double) 建立一個具有引數所指定雙精度值的物件。(不建議採用)
  BigDecimal(long) 建立一個具有引數所指定長整數值的物件。
  BigDecimal(String) 建立一個具有引數所指定以字串表示的數值的物件
  注:當double必須用作BigDecimal的源時,請使用Double.toString(double)轉成String,然後使用String構造方法,或使用BigDecimal的靜態方法valueOf,
  BigDecimal b1 = new BigDecimal(Double.toString(v1));
  BigDecimal b2 = new BigDecimal(Double.toString(v2));
 
 1,加法運算:---並將結果值轉換為double值
  b1.add(b2).doubleValue();
  
  2,減法運算:---
  b1.subtract(b2).doubleValue();
  
  3,乘法運算:---
  b1.multiply(b1).doubleValue();
  
  4,除法運算:(保留小數後兩位)
  b1.divide(b2, 2, RoundingMode.HALF_UP));
  
  如:1.35
  對數值取值:
  1.a.setScale(1,BigDecimal.ROUND_DOWN);
  取一位小數,直接刪除後面多餘位數,故取值1.3.
  
  2.a.setScale(1,BigDecimal.ROUND_UP);
  取一位小數,刪除後面位數,進一位,故取值1.4.
  
  3.a.setScale(1,BigDecimal.ROUND_HALF_UP);
  取一位小數,四捨五入,故取值1.4.
  
  4.a.setScale(1,BigDecimal.ROUND_HALF_DOWN);
  取一位小數,五舍六入,故取值1.3.
  
  


7,substr()-字元擷取函式
     格式1: substr(string string, int a, int b);

   格式2:substr(string string, int a) ;

     格式1:
        1、string 需要擷取的字串 
        2、a 擷取字串的開始位置(注:當a等於0或1時,都是從第一位開始擷取)
        3、b 要擷取的字串的長度

     格式2:
        1、string 需要擷取的字串
        2、a 可以理解為從第a個字元開始擷取後面所有的字串。
        
8,CONCAT():函式----一般模糊查詢拼接字元
    CONCAT(CONCAT('%',%#{引數值}),'%')

    (sql函式具體介紹)阿里雲連結地址:https://help.aliyun.com/knowledge_detail/64813.html#h2-u529Fu80FDu63CFu8FF02