當前位置:首頁 » 編程語言 » sql語句判斷函數

sql語句判斷函數

發布時間: 2023-05-02 06:26:57

sql的基本函數

【二】SQL的基本函數

2.1 關系型資料庫SQL命令類別

數據操縱語言:DML: select; insert; delete; update; merge.

數據定義語言:DDL: create; alter; drop; truncate; rename; comment.

事務控制語言:TCL: commit; rollback; savepoint.

數據控制語言:DCL: grant; revoke.

2.2 單行函數與多行函數

單行函數:指一行數據輸入,返回一個值得函數。所以查詢一個表時,對選擇的每一行數據都會返回一個結果。

SQL>select empno,lower(ename) from emp;

多行函數:指多行數據輸入,返回一個值得函數。所以對表的群組進行操作,並且每組返回一個結果。(典型的是聚合函數)

SQL>select sum(sal) from emp;

2.3 單行函數的幾種類型

2.3.1 字元型函數

lower('SQL Course')----->sql course 返回小寫

upper('sql course')----->SQL COURSE 返回大學

initcap('SQL course')-----> Sql Course 每個單字返回首字母大寫

concat('good','string')---->good string 拼接 只能拼接2個字元串

substr('String',1,3)---->Str 從第1位開始截取3位數,

演變:只有兩個參數的

substr('String',3) 正數第三位起始,得到後面所有字元

substr('String',-2) 倒數第二位,起始,得到最後所有字元

instr('t#i#m#r#a#n#','#') --->找第一個#字元在那個絕對位置,得到的數值

Instr參數經常作為substr的第二個參數值

演變:Instr參數可有四個之多

如select instr('aunfukk','u',-1,1) from al; 倒數第一個u是哪個位置,結果返回5

length('String')---->6 長度,得到的是數值

length參數又經常作為substr的第三個參數

lpad('first',10,'#39;)左填充

rpad(676768,10,'*')右填充

replace('JACK and JUE','J','BL')---->BLACK and BLUE

trim('m' from 'mmtimranm')---->timran 兩頭截,這里的『m』是截取集,僅能有一個字元

trim( ' timran ')---->timran 作用是兩頭去空字元

處理字元串時,利用字元型函數的嵌套組合是非常有效的:

create table customers(cust_name varchar2(20));

insert into customers values('Lex De Hann');

insert into customers values('Renske Ladwig');

insert into customers values('Jose Manuel Urman');

insert into customers values('Joson Malin');

select * from customers;

CUST_NAME

--------------------

Lex De Hann

Renske Ladwig

Jose Manuel Urman

Joson Malin

一共四條記錄,客戶有兩個名的,也有三個名的,現在想列出僅有三個名的客戶,且第一個名字用*號略去

答案之一:

SELECT LPAD(SUBSTR(cust_name,INSTR(cust_name,' ')),LENGTH(cust_name),'*') "CUST NAME"

FROM customers

WHERE INSTR(cust_name,' ',1,2)>0;

CUST NAME

------------------------------------------------------------------------------------------------------------------------

*** De Hann

**** Manuel Urman

分析:

先用INSTR(cust_name,' ')找出第一個空格的位置,

然後,SUBSTR(cust_name,INSTR(cust_name,' '))從第一個空格開始往後截取字元串到末尾,結果是第一個空格以後所有的字元,

最後,LPAD(SUBSTR(cust_name,INSTR(cust_name,' ')),LENGTH(cust_name),'*')用LPAD左填充到cust_name原來的長度,不足的部分用*填充,也就是將第一個空格前的位置,用*填充。

where後過濾是否有三個名字,INSTR(cust_name, ' ',1,2)從第一個位置,從左往右,查找第二次出現的空格,如果返回非0值,則說明有第二個空格,則有第三個名字。

2.3.2 數值型函數

round 對指定的值做四捨五入,round(p,s) s為正數時,表示小數點後要保留的位數,s也可以為負數,但意義不大。

round:按指定精度對十進制數四捨五入,如:round(45.923, 1),結果,45.9

round(45.923, 0),結果,46

round(45.923, -1),結果,50

trunc 對指定的值取整 trunc(p,s)

trunc:按指定精度截斷十進制數,如:trunc(45.923, 1),結果,45.9

trunc(45.923),結果,45

trunc(45.923, -1),結果, 40

mod 返回除法後的余數

SQL> select mod(100,12) from al;

2.3.3 日期型函數

因為日期在oracle里是以數字形式存儲的,所以可對它進行加減運算,計算是以天為單位。

預設格式:DD-MON-RR.

可以表示日期范圍:(公元前)4712 至(公元)9999

時間格式

SQL> select to_date('2003-11-04 00:00:00' ,'YYYY-MM-DD HH24:MI:SS') FROM al;

SQL> select sysdate+2 from al; 當前時間+2day

SQL> select sysdate+2/24 from al; 當前時間+2hour

SQL> select sysdate+2/1440 from al; 當前時間+2分鍾

SQL> select (sysdate-hiredate)/7 week from emp; 兩個date類型差,結果是以天為整數位的實數。

①MONTHS_BETWEEN 計算兩個日期之間的月數

SQL>select months_between('1994-04-01','1992-04-01') mm from al;

查找emp表中參加工作時間>30年的員工

SQL>select * from emp where months_between(sysdate,hiredate)/12>32;

很容易認為單行函數返回的數據類型與函數類型一致,對於數值函數類型而言的確如此,但字元和日期函數可以返回任何數據類型的值。比如instr函數是字元型的,months_between函數是日期型的,但它們返回的都是數值。

②ADD_MONTHS 給日期增加月份

SQL>select hiredate,add_months(hiredate,4) from emp;

③LAST_DAY 日期當前月份的最後一天

SQL>select hiredate,last_day(hiredate) from emp;

④NEXT_DAY NEXT_DAY的第2個參數可以是數字1-7,分別表示周日--周六(考點)

比如要取下一個星期六,則應該是:

SQL>select next_day(sysdate,7) FROM DUAL;

⑤ROUND(p,s),TRUNC(p,s)在日期中的應用,如何舍入要看具體情況,s是MONTH按30天計,應該是15舍16入,s是YEAR則按6舍7入計算。

SQL>SELECT empno, hiredate,round(hiredate,'MONTH') AS round,trunc(hiredate,'MONTH') AS trunc FROM emp;

SQL>SELECT empno, hiredate, round(hiredate,'YEAR') AS round,trunc(hiredate,'YEAR') AS trunc FROM emp;

2.3.4 幾個有用的函數和表達式

1)DECODE函數和CASE表達式:

實現sql語句中的條件判斷語句,具有類似高級語言中的if-then語句的功能。

decode函數源自oracle, case表達式源自sql標准,實現功能類似,decode語法更簡單些。

decode函數用法:

SQL> SELECT job, sal,

decode(job, 'ANALYST', SAL*1.1, 'CLERK', SAL*1.15,'MANAGER', SAL*1.20, SAL) SALARY FROM emp

decode函數的另幾種常見用法:

SQL>select ename,job,decode(job,'MANAGER','中層幹部') leader from emp;

SQL> select ename,job,comm,decode (comm,null,'nonsale','sale') saleman from emp;

註:單一列處理,共四個參數:含義是:comm 如果為null就取'nonsale,否則取'sale'

SQL> select sal,sign(sal-1500) from emp;

SQL> select ename,decode (sign(sal-1500), 1, 'NORMAL','LOW') as "LEV" from emp;

註:sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1,含義是:工資大於1500,返回1,真取'NORMAL',假取'LOW'

CASE表達式第一種用法:

SQL> SELECT job, sal,

case job when 'ANALYST' then SAL*1.10

when 'CLERK' then SAL*1.15

when 'MANAGER' then SAL*1.20

else sal end SALARY

FROM emp

CASE表達式第二種用法:

SQL> SELECT job, sal, case

when job='ANALYST' then SAL*1.1

when job='CLERK' then SAL*1.15

when job='MANAGER' then SAL*1.20

else sal end SALARY

FROM emp

以上三種寫法結果都是一樣的

CASE第二種語法比第一種語法增加了搜索功能。形式上第一種when後跟定值,而第二種還可以使用表達式和比較符。

看一個例子

SQL> SELECT ename,sal,case

when sal>=3000 then '高級'

when sal>=2000 then '中級'

else '低級' end 級別

FROM emp

再看一個例子:使用了復雜的表達式

SQL> SELECT AVG(CASE

WHEN sal BETWEEN 500 AND 1000 AND JOB='CLERK'

THEN sal ELSE null END) "CLERK_SAL"

from emp;

比較;

SQL> select avg(sal) from emp where job='CLERK';

2)DISTINCT(去重)限定詞的用法:

distinct貌似多行函數,嚴格來說它不是函數而是select子句中的一個選項。

SQL> select distinct job from emp; 消除錶行重復值。

SQL> select distinct job,deptno from emp; 重復值是後面的欄位組合起來考慮的

SQL> select distinct * from emp; 消除重復記錄

3)sys_context 獲取環境上下文的函數(多用於應用環境)

scott遠程登錄

SQL>select SYS_CONTEXT('USERENV','IP_ADDRESS') from al;

--------------------------------------------------------------------------------

192.168.0.136

SQL> select sys_context('userenv','sid') from al;

SYS_CONTEXT('USERENV','SID')

--------------------------------------------------------------------------------

129

SQL> select sys_context('userenv','terminal') from al;

SYS_CONTEXT('USERENV','TERMINAL')

--------------------------------------------------------------------------------

TIMRAN-222C75E5

the end !!!

@jackman 共築美好!

⑵ SQL判斷字元串是否在目標字元串中的函數

根據需求,寫了一段方法。 用於識別以下的情況: 判斷 字元串A 在用逗號分隔的字元串B中是攔瞎否存在如:頌慧 v_str_a = aa ; v_str_b= aa,bb,dd,cc ; 如上,就返回Y,否則返回N. 添加了一些校驗。 以後可以根據需求,按照指定的分隔符,提取字元串。 畢竟Oracle的字元串解析比較麻煩,能封裝就封裝。 Sql代碼 create or replace function func_str_inArray(p_target varchar2, p_str_array varchar2) return varchar2 is v_flag varchar2(1); v_comma_loc int; v_cut_string varchar2(300); v_rest_string varchar2(2000); begin ------------------------ --p_target 不能包含","!!!注意!! --info:這個函數用於識別目標字元串,是否在一串用","分開的字元串內 ------------------------ v_flag := 'N'; v_comma_loc := instr(p_str_array, ','); --如果是對比字元串是空,則返回false if nvl(p_str_array, '') = '' then return 'N'; end if; --如果沒有逗號,直接比較 if length(p_str_array) > 0 and v_comma_loc = 0 then if p_target = p_str_array then return 'Y'; else return 'N'; end if; end if; v_rest_string := p_str_array; while v_comma_loc > 0 loop v_cut_string := substr(簡櫻空v_rest_string, 0, v_comma_loc - 1); v_rest_string := substr(v_rest_string, v_comma_loc + 1, length(v_rest_string) - 1); if p_target = v_cut_string then v_flag := 'Y'; end if; v_comma_loc := instr(v_rest_string, ','); if v_comma_loc = 0 and length(v_rest_string) > 0 then if p_target = v_rest_string then v_flag := 'Y'; end if; end if; end loop; return v_flag; end;

⑶ 關於資料庫SQL語句的判斷題

1,對
比如 select 學生姓名,sum(分數) from 表名 group by 學生姓名
這個是對好多行進行處理,最後得到每個學生的總分,謹改瞎世也就是每個組生成一個結果

2錯
NULL值不能參加計算,否則這個被計算的值最後也是空
只能對NULL特殊處理變成0才可以參加計算

3錯
應該在分組計算之後
select a.學生姓名祥神判,a.總分 from
(select 學生姓名,sum(分數) as 總分 from 表名 group by 學生姓名) as a
where .總分>200
這個where是要在分組計算之後才能進行

⑷ 在sql語句中怎麼判斷一個欄位是否包含在另一個字元串中

sql語句判斷一個欄位是否包含在另一個字元串中的方法

一、語句中使用到的函數有

1、CHARINDEX:函數返回字元或者字元串在另一個字元串中的起始位置。

語法:CHARINDEX ( expression1 , expression2 [ , start_location ] )

expression1是要到expression2中尋找的字元中,start_location是CHARINDEX函數開始在expression2中找expression1的位置。

CHARINDEX函數返回一個整數,返回的整數是要找的字元串在被找的字元串中的位置。假如CHARINDEX沒有找到要找的字元串,那麼返回0

2、rtrim:函數去除字元串右邊的空格符。

二、例子中的表格為:tt,結構數據如下

⑸ SQL中判斷字元串相等的函數

不區分大小寫的話用函數nullif(value1,value2) -- value1 非NULL值,相等返回null,不相等返回值1

declare @s1 varchar(100),@s2 varchar(100)

set @s1 = 'abc'

set @s2 = 'ABC'

select isnull(nullif(@s1,@s2),'相等') -- 執行返回相等

區分大小寫的話用HashBytes函數

⑹ sql語句中if判斷條件怎麼寫(mysql語句中if判斷條件怎麼寫)

sql語句中if判斷條件是結合select語句使用的。IF函數也能通過判斷條件來返回特定值,它的語法如下:IF(expr,result_true,result_false)。

expr是一個條件表達式,如果結果為true,則返回result_true,否則返回result_false。在一些場景中,IF函數和CASEWHEN是有同樣效果的,前者相對簡單,後者能應對更復雜的判斷。另外,IF函數還可以和聚合函數結合。

SQL其他情況簡介。

SQL是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。

結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不茄中要求用戶指定對數據的存放方法,也不需要用戶了解具體的態納槐數據存放方式,所以具有完全不同底層帆友結構的不同資料庫系統,可以使用相同的結構化查詢語言作為數據輸入與管理的介面。

⑺ 求一個帶有條件判斷的SQL語句或函數

用悶櫻亂螞檔case嘛頌扒,通過「SELECT Score.key FROM Score where 滿足一定條件」查詢出來的條數是否為0來判斷。

⑻ 條件判斷函數-CASE WHEN、IF、IFNULL詳解

在眾多SQL中,統計型SQL絕對是讓人頭疼的一類,之所以如此,是因為這種SQL中必然有大量的判讀對比。而條件判斷函數就是應對這類需求的利器。本文重點總結 CASE WHEN 、 IF 、 IFNULL 三種函數。

Case when語句能在SQL語句中織入判斷邏輯,類似於Java中的if else語畝李句。

CASE WHEN語句分為簡單函數和條件表達式。

1、簡單函數

如果欄位值等於預期值,則返回結果1,否則返回結果2。

下面通過一個簡單的示例來看一下具體用法。

表score:

場景:在score表中,sex為1表示男性,sex=0表示女性,查詢時轉換成漢字顯示。

SQL語句:

結果:

2、條件表達式

CASE的簡單函數使用簡便,但無法應對較為復雜的場景,這就需要用到條件表達式了,其語法結構如下:

解釋一下,語句中的condition是條件判斷,租耐卜如果該判斷結果為true,那麼CASE語句將返回result,否則返回result2,如果沒有ELSE,則返回null。CASE與END之間可以有多個WHEN…THEN…ELSE語句。END表示CASE語句結束。

場景:score 大於等於90為優秀,80-90為良好,60-80為及格,小於60為不及格,用SQL語句統計出每個學生的成績級別。

SQL:

結果:

3、綜合使用

CASE WHEN 和 聚合函數綜合使用,能實現更加復雜的統計功能。

先看第1個場景

在下表 score (sex=1為男,sex=0為女)中,統計有多少個男生和女生以及男女生及格的各有多少個。

SQL:

結果:

再看第2個場景

將上面的score表轉換為下面形式:

SQL:

結果如下:

IF函數也能通過判斷條件來返回特定值,它的語法如下:

expr是一弊穗個條件表達式,如果結果為true,則返回result_true,否則返回result_false。

用一個示例演示,還是表score:

使用IF函數:

可以看出,在一些場景中, IF 函數和 CASE WHEN 是有同樣效果的,前者相對簡單,後者能應對更復雜的判斷。

另外,IF函數還可以和聚合函數結合,例如查詢班級男生女生分別有多少人:

在Java程序中調用sql語句時,如果返回結果是 null ,是非常容易引發一些意外情況的。

因此,我們希望在SQL中做一些處理,如果查詢結果是 null ,就轉換為特定的值,這就要用到Mysql中 IFNULL 函數。

首先SQL一般寫法是這樣的:

使用 IFNULL 改寫一下:

但使用 IFNULL 語句,如果 where 條件中的 name 值是不存在的,那麼仍將返回 null ,例如:

這時候,需要改寫成下面的形式:

在實際應用中,如果你確定 where 條件的值一定存在,使用前者就可以了,否則要用後者。

IFNULL 函數也可以結合聚合使用,例如:

其他, AVG 、 COUNT 等用同樣方式處理,而且,無論 where 條件存在不存在,結果都是會返回0的。

END

引用鏈接:blog.csdn.net/mu_wind/article/details/93976316

⑼ sql中怎樣判斷函數已經存在

是否存在某函數的判斷if exists(select 0 from sysobjects where name='函數名' and xtype='FN')begin --存在end

⑽ sql server的sql語句怎麼判斷一個欄位是否為空

使用 is null 或 is not null 來處理列的空值。

語法為:

列名 is null (欄位為空返回true ,不為空返回 false)

列名 is not null (欄位為空返回false,不為空返回 true)

例如:

select case when a is null then 1 else 0 end from aaa

語法大意:如果a列 為空顯示1,不為空顯示0。

(10)sql語句判斷函數擴展閱讀:

注意事項

欄位內容為空有兩種情況

1.為null

2.為字元串的空''

語句如下:

select * from table where column is null or trim(column)=''

這樣就可以排除欄位內容為null、''的。

判斷某個欄位不為空

select * from table where trim(column) != ''

曾經嘗試判斷null:is not null.但是不起作用,放棄。。。直接 trim(column) != '' 就能解決。

熱點內容
18經驗起床的伺服器ip 發布:2024-11-01 12:30:15 瀏覽:39
這個鎖屏密碼是什麼 發布:2024-11-01 12:24:51 瀏覽:92
相機存儲卡排名 發布:2024-11-01 12:24:49 瀏覽:958
androidxml格式化 發布:2024-11-01 12:23:14 瀏覽:165
Vb6編譯是錯誤不知道錯誤代碼 發布:2024-11-01 12:16:23 瀏覽:159
區域網電腦訪問伺服器怎麼提速 發布:2024-11-01 12:14:09 瀏覽:322
美創資料庫 發布:2024-11-01 12:05:45 瀏覽:916
你改愛奇藝密碼什麼意思 發布:2024-11-01 12:04:48 瀏覽:409
矩陣分解python 發布:2024-11-01 11:58:23 瀏覽:367
如何查詢微信支付密碼修改記錄 發布:2024-11-01 11:51:57 瀏覽:207