函數與存儲過程的區別
函數和存儲過程意義和好處都是一樣的。它們的唯一區別就是:存儲過程可以沒有返回值,也可以有多個返回值,適合做批量插入數據、批量更新等。
函數必須有返回值,而且只能有1個,適合做處理數據後返回1個結果。
存儲過程詳情可看存儲過程
系統函數
此處僅列舉了一些常用的系統函數,更多可查看SQL Server2008函數大全
內容取自SQL Server2008函數大全
字符串函數
charindex(字符串表達式 1, 字符串表達式2,[整數表達式])
--例一
select charindex('ab','xcabcd') --返回 3
--例二
select charindex('ab','LDDbBabD',4) --返回 6
在字符串2 中查找字符串 1,如果存在返回第一個匹配的位置
如果不存在返回0。如果字符串 1 和字符串 2 中有一個是null 則返回 null。
可以指定在字符串2 中查找的起始位置。及例二中的4
==================================================================
left(字符串表達式,整數表達式)
select left('dsdasdajk',2) --返回 ds
返回字符串中從左邊開始指定個數的字符。
==================================================================
right(字符串表達式,整數表達式)
select right('asdkljasdlas',2) --返回 as
返回字符串中從右邊開始指定個數的字符。
==================================================================
len(字符串表達式)
select len('abcdefg') --返回 7
返回指定字符串表達式的字符數,其中不包含尾隨空格。
==================================================================
lower(字符串表達式)
select lower('ABCDEF') --返回 abcdef
返回大寫字符數據轉換爲小寫的字符表達式。
==================================================================
upper(字符串表達式)
select upper('abcd') --返回 ABCD
返回小寫字符數據轉換爲大寫的字符表達式。
==================================================================
ltrim(字符串表達式)
select ltrim('abc') --返回 abc
返回刪除了前導空格之後的字符表達式。
==================================================================
rtrim(字符串表達式)
select rtrim('abc') --返回 abc
返回刪除了尾隨空格之後的字符表達式。
==================================================================
reverse(字符串表達式)
select reverse('abcde') --返回 edcba
返回指定字符串反轉後的新字符串
==================================================================
stuff(字符串表達式 1,開始位置,長度,字符串表達式 2)
select stuff('abcdef',2,2,'123') --返回 a123def
在字符串表達式1 中在指定的開始位置刪除指定長度的字符,
並在指定的開始位置處插入字符串表達式2。返回新字符串
==================================================================
substring(字符串表達式,開始位置,長度)
select substring('abcdef',2,2) --返回bc
返回子字符串
==================================================================
replace(字符串表達式 1,字符串表達式 2,字符串表達式 3)
Select replace('abcttabchhabc','abc','123') --返回 123tt123hh123
用字符串表達式3 替換字符串表達式 1 中出現的所有字符串
表達式2 的匹配項。返回新的字符串
日期函數
dateadd(日期部分,數字,日期)
select dateadd(year,45,'1990-12-11') --返回 2035-12-11 00:00:00.000
返回給指定日期加上一個時間間隔後的新的日期值。
數字:用於與指定的日期部分相加的值。如果指定了非整數值,
則將捨棄該值的小數部分,捨棄時不遵循四捨五入。
日期:指定的原日期在此函數中dw,dy,dd 效果一樣都表示天
==================================================================
datediff(日期部分,開始日期,結束日期)
select datediff(yy,'1990-12-11','2008-9-10') --返回 18
返回兩個指定日期的指定日期部分的差的整數值。
在計算時由結束日期減去開始日期
==================================================================
getdate無參數
select getdate() --返回 2020-05-24 08:27:24.153
返回當前系統日期和時間。
==================================================================
day(日期)
select day('2020-5-11') --返回 11
返回一個整數,表示指定日期的天的部分。
==================================================================
month(日期)
select month('2020-5-11') --返回 5
返回一個整數,表示指定日期的月的部分。
==================================================================
year(日期)
select year('2020-5-11') --返回2020
返回一個整數,表示指定日期的年的部分。
數學函數
abs(數值表達式)
select abs(-23.4) --返回 23.4
返回指定數值表達式的絕對值(正值)
==================================================================
rand([整數表達式])
select rand(100) --返回0.715436657367485
返回從0 到 1 之間的隨機 float 值。
整數表達式爲種子,使用相同的種子產生隨機數相同。
即使用同一個種子值重複調用RAND() 會返回相同的結果。
不指定種子則系統會隨機生成種子。
==================================================================
round(數值表達式[,長度[,操作方式]])
select round(1236.555,2)--返回1236.560
返回一個數值,舍入到指定的長度。注意返回的數值和原數值的總位數沒有變化。
==================================================================
convert(數據類型[(長度)],表達式[,樣式])
select N'年齡:'+convert(nvarchar,23) --返回 年齡:23
將一種數據類型的表達式顯式轉換爲另一種數據類型的表達式。
聚合函數
avg
SELECT avg(VacationHours)as '平均休假小時數'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'
返回組中各值的平均值。空值將被忽略。 表達式爲數值表達式。
==================================================================
count
SELECT count(distinct Color)FROM Production.Product
返回組中的項數。COUNT(*) 返回組中的項數。包括 NULL 值和重複項。如果指定
表達式則忽略空值。表達式爲任意表達式。
==================================================================
min
select min(ListPrice)from Production.Product
返回組中的最小值。空值將被忽略。表達式爲數值表達式,字符串表達式,日期。
==================================================================
max
select max(ListPrice) from Production.Product
返回組中的最大值。空值將被忽略。表達式爲數值表達式,字符串表達式,日期。
==================================================================
sum
SELECT sum(SickLeaveHours) as '總病假小時數'
FROM HumanResources.Employee
WHERE Title LIKE 'Vice President%'
返回組中所有值的和。空值將被忽略。表達式爲數值表達式
自定義函數
創建
create function 函數名(--輸入參數)
returns --返回值類型
as
begin
--代碼塊
end
go
--調用
select dbo.函數名(參數列表)
================================================================
實例:
--創建
go
create function mysex
(
@sex bit
)
returns varchar(4) --返回的數據類型
as
begin
declare @rsex varchar(4)
if @sex=1
select @rsex='男'
else
select @rsex='女'
return @rsex
end
--調用
go
select *,dbo.mysex(Sex) from Customers
刪除
drop function 函數名
查看
exec sp_helptext '函數名'