一、判斷函數
VALUE函數 語法:VALUE(EXPRESSION1,EXPRESSION2) VALUE函數是用返回一個非空的值,當其第一個參數非空,直接返回該參數的值,如果第一個參數為空,則返回第二個參數的值。 --表示如果T1.ID為空,則返回空串,如果T1.ID不為空,則返回T1.ID。 SELECT VALUE(ID,'') FROM T1
COALESCE函數 語法:COALESCE(ARG1,ARG2...) COALESCE返回參數集中第一個非null參數。用法類似於VALUE函數。當其第一個參數非空,直接返回該參數的值,如果第一個參數為空,則返回第二個參數的值 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。
case when 函數 select ID,Username,namer=(case when(score<='50')then '實習' when(score>'50' and score<='500' ) then '赤腳醫生' when(score>'500' and score<='1000' ) then '村衛生員' when(score>'1000' and score<='1500' ) then '鄉衛生員' when(score>'1500' and score<='2000' ) then '鎮衛生員' when(score>'2000' and score<='3000' ) then '醫師' when(score>'3000' and score<='5000' ) then '主治醫師' when(score>'5000' and score<='10000' ) then '副主任醫師' when(score>'10000' and score<='20000' ) then '主任醫師' when(score>'20000' and score<='50000' ) then '健康大使' else '健康大使' end ), (SELECT count(id) FROM jk01_YiWen_Question WHERE UserID = dbo.jk01_Member.ID) as questionnum from jk01_Member
exists(A)函數
判斷是否存在,存在數據返回true,不存在返回false
先記住怎么用,不懂
1、不關聯情況下,內表有數據,用not exists查不到
不關聯不帶入去檢驗,判斷里面是否查詢出來返回為true或者false
2、關聯情況下,內表有數據,not exists查詢的是外表不存在於內表的數據
將外查詢表的每一行,代入內查詢作為檢驗,如果內查詢返回的結果取非空值,則EXISTS子句返回TRUE,這一行行可作為外查詢的結果行,否則不能作為結果。
這里的存在是存在於,舉個例子來說 a表中有兩條數據
1、判斷子表中存在數據么,存在的話返回true,即where語句執行
select * from A a where exists (select 1 from A b )
執行結果如下
2、判斷子表中不存在數據么,不存在的話返回true,即where語句執行
select * from A a where not exists (select 1 from A b )
執行結果如下
3、如果在子表中加入條件使其關聯外表
select * from A a where exists (select 1 from A b where b.a=a.a )
執行結果如下
4、如果在子表的查詢語句中加上where條件過濾並且與外表關聯
select * from A a where exists (select 1 from A b where b.a=a.a and b.a='1a' )
5、如果在子表的查詢語句中加上where條件過濾並且與外表關聯
select * from A a where not exists (select 1 from A b where b.a=a.a and b.a='1a' )
關聯上表的時候就可以理解為與In一個用法,判斷外表存在於內表里的數據或者不存在於內表里的數據並且顯示出來
二、字符串函數
判斷字符在字符串中的位置 1、instr函數 語法:instr('aa|bb|cc|dd|','|',1,1) aa --多了一個結束標記位置 instr(源字符串, 要查找的字符串, 從第幾個字符開始, 要找到第幾個匹配的序號)//返回找到的位置,如果找不到則返回 ps:數據庫中字符串索引都是從1開始,從0開始的話是搜索不到的,例如:select instr('oracle traning','ra',0,2) instring from dual;索引為0返回的值是0 ps:默認查找順序為從左到右。當起始位置為負數的時候,從右邊開始查找。 2、LOCATE函數 語法:LOCATE(ARG1,ARG2,<POS>) --只有起始位置 LOCATE函數在ARG2中查找ARG1第一次出現的位置,如果指定POS,則從ARG2的POS處開始查找ARG1第一次出現的位置。
SELECT LOCATE('a',NAME) FROM T1
3、POSSTR函數 語法:POSSTR(EXP1,EXP2) POSSTR函數返回EXP2在EXP1中的位置。 --沒有起始位置和結束位置 SELECT LOCATE(NAME,'a') FROM T1
返回字符串長度
2、LENGTH函數 語法:LENGTH(ARG) LENGTH函數返回參數的長度。 eg: SELECT LENGTH(NAME) FROM T1
字符串變大小寫 1、LCASE、LOWER函數 語法:LCASE()、LOWER() LCASE、LOWER函數返回定長、變長字符串的小寫形式。 eg: SELECT LCASE(NAME),LOWER(NAME) FROM T1 2、UCASE、UPPER函數 語法:UCASE()、UPPER() UCASE、UPPER函數返回定長、變長字符串的大寫形式。
SELECT UCASE(NAME),UPPER(NAME) FROM T1
去除空格
1、LTRIM、RTRIM函數 DB2中無trim()函數,所以要去空格要執行左右去空格。 語法:LTRIM()、RTRIM() LTRIM、RTRIM函數從CHAR、VARCHAR、GRAPHIC或者VARGRAPHIC中去掉左側或右側的空格。 eg: SELECT LTRIM(NAME),RTRIM(NAME) FROM T1 2、LEFT、RIGHT函數 語法:LEFT(ARG,LENGTH)、RIGHT(ARG,LENGTH) LEFT、RIGHT函數返回ARG最左邊、右邊的LENGTH個字符串,ARG可以是CHAR或BINARY STRING。 eg: SELECT LEFT(NAME,2),RIGHT(NAME,2) FROM T1
連接字符串
1、CONCAT函數 語法:CONCAT(ARG1,ARG2) CONCAT函數返回兩個字符串的連接。 eg: SELECT CONCAT(FIRST_NAME,LAST_NAME) FROM T1
替換字符串
1、INSERT函數 語法:INSERT(ARG1,POS,SIZE,ARG2) --找到位置替換 INSERT函數返回一個字符串,將ARG1從POS處刪除SIZE個字符,將ARG2插入該位置。
2、REPLACE函數 語法:REPLACE(EXP1,EXP2,EXP3) REPLACE函數用EXP3代替EXP1中所有的EXP2。 eg: SELECT REPLACE('ROMANND','NND','CCB') FROM T1
根據條件查找字符串,返回字符串
1、REPEAT函數 語法:REPEAT(ARG1,NUM_TIMES) REPEAT函數返回ARG1被重復NUM_TIMES次的字符串。 eg: SELECT REPEAT(NAME,2) FROM T1
2、SPACE函數 語法:SPACE(SIZE) SPACE函數返回一個包含SIZE個空格的字符串。 eg: SELECT SPACE(10) FROM T1
截斷字符串
1、SUBSTR函數 語法:SUBSTR(ARG1,POS,<LENGTH>) SUBSTR函數返回ARG1中POS位置開始的LENGTH個字符,如果沒有指定LENGTH,則返回剩余的字符。 substr()是指從position開始算(包括position這個字符),截取的長度,也包括位置+長度所在的字符(前提是字符串的長度大於或等於兩者之和)。 eg: SELECT SUBSTR('CDNJFDJFJD',5,2) FROM T1
轉換為字符串
1、char函數 轉化成字符串 char(100)——把100轉化為100字符串內容 char(current date,ISO)——轉換成yyyy-mm-dd char(current date,USA)——轉換成mm/dd/yyyy char(current date,EUR)——轉換成dd.mm.yyyy
三、分組函數
row_number() over()函數
分組排序求和函數,有一篇專門的文檔記錄
四、類型轉換函數
1、CAST表達式用來轉換類型使用 SELECT CAST(CURRENT TIME AS CHAR(8) ) FROM SYSIBM.SYSDUMMY1 2、轉換為字符串類型: CHAR函數 語法:CHAR(ARG) CHAR函數返回日期時間型、字符串、整數、十進制或雙精度浮點數的字符串表示。 SELECT CHAR(SALARY) FROM TEST 3、CHR函數 語法:CHR(ARG) CHR函數返回由參數指定的ASCII碼的字符,參數可以是INTEGER或SMALLINT。 SELECT CHR(167) FROM TEST 4、VARCHAR函數 語法:VARCHAR(ARG,LENGTH) VARCHAR函數返回字符串、日期型、圖形串的可變長度的字符串表示。SELECT VARCHAR(NAME,50) FROM TEST --50為截取長度,如果name字符串的長度大於50,則返回“SQL0445W 值已被截斷。SQLSTATE=01004”。 5、DIGITS函數 語法:DIGITS() DIGITS函數返回SMALLINT、INTEGER、BIGIT或者DECIMAL參數的字符串值。 SELECT DIGITS(ID) FROM TEST 6、轉換為數字類型: DOUBLE、FLOAT函數 語法:DOUBLE()、FLOAT() DOUBLE、FLOAT函數如果參數是一個數字表達式,返回與其對應的浮點數,否則返回錯誤代碼。SELECT DOUBLE('4569') FROM TEST 7、INT函數 語法:INT() INT函數返回整型常量中的數字、字符串或者日期、時間的整數表示。SELECT INT('111') FROM TEST 8、BIGINT函數 語法:BIGINT() BIGINT函數返回整型常量中的數字、字符串或者時間戳的64位長整數表示。SELECT BIGINT('111') FROM TEST 9、SMALLINT函數 語法:SMALLINT() SMALLINT函數返回整型常量中的數字、字符串短整數表示。SELECT SMALLINT('111') FROM TEST 10、REAL函數 語法:REAL() REAL函數返回一個數值的單精度浮點數表示。SELECT REAL(10) FROM TEST 11、DEC[IMAL]函數 語法:DEC[IMAL]() DEC[IMAL]函數返回一個數值、DECIMAL的字符串、INTEGER的字符串、FLOAT-POINT的字符串、日期、時間或時間戳的DECIMAL數值。SELECT DEC(10) FROM TEST 12、HEX函數 語法:HEX() HEX函數返回一個字符串的值的16進制表示。SELECT HEX(10) FROM TEST 13、FLOOR函數 語法:FLOOR() FLOOR函數小於或等於參數的最大整數。 SELECT FLOOR(10.50) FROM TEST