A. sql 中isnull函數的用法
1,語法 :
ISNULL ( check_expression , replacement_value )
2,參數 :
check_expression**
將被檢查是否為 NULL的表達式。check_expression 可以是任何類型的。
replacement_value
在 check_expression 為 NULL時將返回的表達式。replacement_value 必須與check_expresssion 具有相同的類型。
3,返回類型 :
返回與 check_expression 相同的類型。
4,注釋 :
如果 check_expression 不為 NULL,那麼返回該表達式的值;否則返回 replacement_value。
5,示例 :
將 ISNULL 與 AVG 一起使用
*下面的示例查找所有書的平均價格,用值 $10.00 替換 titles 表的 price 列中的所有 NULL 條目。
USE pubs
GO
SELECT AVG(ISNULL(price, $10.00))
FROM titles
GO*
(1)sql中函數的用法擴展閱讀:
Oracle 沒有 ISNULL() 函數。不過,可以使用 NVL() 函數達到相同的結果。
MySQL 也擁有類似 ISNULL() 的函數。不過它的工作方式與微軟的 ISNULL() 函數有點不同。
在 MySQL 中,我們可以使用 IFNULL() 函數。
B. 講解SQL Server資料庫中函數的使用方法
本文主要主要講解了SQL Server資料庫中函數的兩種用法 具體內容請參考下文
◆ 由於update里不能用存儲過程 並且由於根據更新表的某些欄位還要進行計算 所以很多人採用的是游標的方法 在這里我們可以用函數的方法實現
函數部分
CREATE FUNCTION [DBO] [FUN_GETTIME] (@TASKPHASEID INT)RETURNS FLOAT ASBEGINDECLARE @TASKID INT @HOUR FLOAT @PERCENT FLOAT @RETURN FLOATIF @TASKPHASEID IS NULLBEGINRETURN( )ENDSELECT @TASKID=TASKID @PERCENT=ISNULL(WORKPERCENT )/ FROM TABLETASKPHASEWHERE ID=@TASKPHASEIDSELECT @HOUR=ISNULL(TASKTIME ) FROM TABLETASKWHERE ID=@TASKIDSET @RETURN=@HOUR*@PERCENTRETURN (@RETURN)END調用函數的存儲過程部分 CREATE PROCEDURE [DBO] [PROC_CALCCA]@ROID INTASBEGINDECLARE @CA FLOATUPDATE TABLEFMECASETCvalue_M= ISNULL(MODERATE )*ISNULL(FMERATE )*ISNULL(B BASFAILURERATE )*[DBO] [FUN_GETTIME](C ID)FROM TABLEFMECA TABLERELATION B TABLETASKPHASE CWHERE ROID=@ROID AND TASKPHASEID=C ID AND B ID=@ROIDSELECT @CA=SUM(ISNULL(Cvalue_M )) FROM TABLEFMECA WHERE ROID=@ROIDUPDATE TABLERELATIONSET CRITICALITY=@CAWHERE ID=@ROIDENDGO
◆ 我們要根據某表的某些記錄 先計算後求和 因為無法存儲中間值 平時我們也用游標的方法進行計算 但SQL Server 里支持
SUM ( [ ALL DISTINCT ] eXPression )expression
是常量 列或函數 或者是算術 按位與字元串等運算符的任意組合 因此我們可以利用這一功能
函數部分
lishixin/Article/program/SQLServer/201311/22423
C. 請問SQL中decode函數的用法
DECODE函數是ORACLE PL/SQL是功能強大的函數之一,目前還只有ORACLE公司的SQL提供了此函數,其他資料庫廠商的SQL實現還沒有此功能。DECODE有什麼用途呢? 先構造一個例子,假設我們想給智星職員加工資,其標準是:工資在8000元以下的將加20%;工資在8000元以上的加15%,通常的做法是,先選出記錄中的工資欄位值? select salary into var-salary from employee,然後對變數var-salary用if-then-else或choose case之類的流控制語句進行判斷。 如果用DECODE函數,那麼我們就可以把這些流控制語句省略,通過SQL語句就可以直接完成。如下:select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee 是不是很簡潔? DECODE的語法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等於if1時,DECODE函數的結果返回then1,...,如果不等於任何一個if值,則返回else。初看一下,DECODE 只能做等於測試,但剛才也看到了,我們通過一些函數或計算替代value,是可以使DECODE函數具備大於、小於或等於功能。
decode()函數使用技巧
·軟體環境:
1、Windows NT4.0+ORACLE 8.0.4
2、ORACLE安裝路徑為:C:\ORANT
·含義解釋:
decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,預設值)
該函數的含義如下:
IF 條件=值1 THEN
RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
......
ELSIF 條件=值n THEN
RETURN(翻譯值n)
ELSE
RETURN(預設值)
END IF
· 使用方法:
1、比較大小
select decode(sign(變數1-變數2),-1,變數1,變數2) from al; --取較小值
sign()函數根據某個值是0、正數還是負數,分別返回0、1、-1
例如:
變數1=10,變數2=20
則sign(變數1-變數2)返回-1,decode解碼結果為「變數1」,達到了取較小值的目的。
2、表、視圖結構轉化
現有一個商品銷售表sale,表結構為:
month char(6) --月份
sell number(10,2) --月銷售金額
現有數據為:
200001 1000
200002 1100
200003 1200
200004 1300
200005 1400
200006 1500
200007 1600
200101 1100
200202 1200
200301 1300
想要轉化為以下結構的數據:
year char(4) --年份
month1 number(10,2) --1月銷售金額
month2 number(10,2) --2月銷售金額
month3 number(10,2) --3月銷售金額
month4 number(10,2) --4月銷售金額
month5 number(10,2) --5月銷售金額
month6 number(10,2) --6月銷售金額
month7 number(10,2) --7月銷售金額
month8 number(10,2) --8月銷售金額
month9 number(10,2) --9月銷售金額
month10 number(10,2) --10月銷售金額
month11 number(10,2) --11月銷售金額
month12 number(10,2) --12月銷售金額
結構轉化的SQL語句為:
create or replace view
v_sale(year,month1,month2,month3,month4,month5,month6,month7,month8,month9,month10,month11,month12)
as
select
substrb(month,1,4),
sum(decode(substrb(month,5,2),'01',sell,0)),
sum(decode(substrb(month,5,2),'02',sell,0)),
sum(decode(substrb(month,5,2),'03',sell,0)),
sum(decode(substrb(month,5,2),'04',sell,0)),
D. SQL中的CONVERT函數的用法是什麼
CONVERT( 要轉換到的類型, 合法的表達式, 格式化類型 )。
E. SQL中如何調用一個函數啊
1、首先是找到標量函數,右鍵單擊選擇新建。
F. 求教sql函數的正確用法
distinct 省略選擇欄位中包含重復數據的記錄,就是出來的結果無重復數據
RTRIM 去掉字元串右邊的空白字元
CAST 和 CONVERT
將某種數據類型的表達式顯式轉換為另一種數據類型。CAST 和 CONVERT 提供相似的功能。
CAST ( expression AS data_type )
CONVERT (data_type[(length)], expression [, style])
參數
expression
是任何有效的 Microsoft® SQL Server™ 表達式。有關更多信息,請參見表達式。
data_type
目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。有關可用的數據類型的更多信息,請參見數據類型。
length
nchar、nvarchar、char、varchar、binary 或 varbinary 數據類型的可選參數。
style
日期格式樣式,藉以將 datetime 或 smalldatetime 數據轉換為字元數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字元串格式樣式,藉以將 float、real、money 或 smallmoney 數據轉換為字元數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。
SQL Server 支持使用科威特演算法的阿拉伯樣式中的數據格式。
在表中,左側的兩列表示將 datetime 或 smalldatetime 轉換為字元數據的 style 值。給 style 值加 100,可獲得包括世紀數位的四位年份 (yyyy)。
REPLICATE
以指定的次數重復字元表達式。
REPLICATE ( character_expression , integer_expression )
參數
character_expression
由字元數據組成的字母數字表達式。character_expression 可以是常量或變數,也可以是字元列或二進制數據列。
integer_expression
是正整數。如果 integer_expression 為負,則返回空字元串。
SUBSTRING
返回字元、binary、text 或 image 表達式的一部分。
SUBSTRING ( expression , start , length )
參數
expression
是字元串、二進制字元串、text、image、列或包含列的表達式。不要使用包含聚合函數的表達式。
start
是一個整數,指定子串的開始位置。
length
是一個整數,指定子串的長度(要返回的字元數或位元組數)。
MAX
返回表達式的最大值。
RIGHT
返回字元串中從右邊開始指定個數的 字元
LEN
返回給定字元串表達式的字元(而不是位元組)個數,其中不包含尾隨空格。
G. 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 共築美好!
H. sql中round(),floor(),ceiling()函數的用法和區別分別是什麼
round()遵循四捨五入把原值轉化為指定小數位數。
如:round(1.45,0) = 1;round(1.55,0)=2floor()向下舍入為指定小數位數.
如:floor(1.45,0)= 1;floor(1.55,0) = 1ceiling()向上舍入為指定小數位數.
如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
I. sql中round()函數的用法
ROUND() 函數
ROUND() 函數用於把數值欄位舍入為指定的小數位數。
具體語法參考: