[SQL] 函数整理(T-SQL 版)
函數(shù)整理(T-SQL 版)
一、數(shù)學(xué)函數(shù)
1.求絕對值
ABS() 函數(shù)用來返回一個數(shù)值的絕對值。
SELECT ABS(-5.38) AS absValue;
2.求指數(shù)
POWER() ?函數(shù)是用來計算指數(shù)的函數(shù)。該函數(shù)接受兩個參數(shù),第一個參數(shù)為待求冪的表達(dá)式,第二個參數(shù)為冪。
SELECT POWER(5, -0.5) AS powerValue1,POWER(5, 2) AS powerValue2,POWER(5, 3) AS powerValue3;?
3.求平方根
SQRT() ?函數(shù)是用來計算平方根的函數(shù)。該函數(shù)接受一個參數(shù),這個參數(shù)為待計算平方根的表達(dá)式。
SELECT SQRT(9) AS sqrtValue1,SQRT(3) AS sqrtValue2;
4.求隨機數(shù)
SELECT RAND(9527) randValue;?
5.舍入到最大整數(shù)
SELECT CEILING(56.67) ceilingValue1,CEILING(-56.67) ceilingValue2;?
6.舍入到最小整數(shù)
SELECT FLOOR(56.67) floorValue1,FLOOR(-56.67) floorValue2;?
7.四舍五入
ROUND() ?函數(shù)也是用來進(jìn)行數(shù)值四舍五入的。
SELECT ROUND(56.67, 0) roundValue1,ROUND(56.67, 1) roundValue2,ROUND(-56.67, 0) roundValue3;?
8.求正弦值
SELECT SIN(56.67) sinValue;?
9.求余弦值
SELECT COS(56.67) cosValue;?
10.求反正弦值
SELECT 1 / 56.67,ASIN(1 / 56.67) asinValue;?
11.求反余弦值
SELECT 1 / 56.67,ACOS(1 / 56.67) acosValue;?
12.求正切值
SELECT TAN(56.67) tanValue;?
13.求反正切值
SELECT ATAN(56.67) atanValue;?
14.求 2 個變量的反正切
SELECT ATN2(56.67, 2) atn2Value;?
15.求余切
SELECT COT(56.67) cotValue;?
16.求圓周率 π 值
SELECT PI() 'pi';?
17.弧度制轉(zhuǎn)換為角度制
SELECT DEGREES(56.67) degreesValue;?
18.角度制轉(zhuǎn)換為弧度制
SELECT RADIANS(56.67) radiansValue;?
19.求符號
SIGN() 函數(shù)用來返回一個數(shù)值的符號,如果數(shù)值大于 0 則返回 1,如果數(shù)值等于 0 則返回 0,如果數(shù)值小于 0 則返回-1。
SELECT SIGN(1 - 3) signValue1,SIGN(3 - 1) signValue2,SIGN(0) signValue3;?
20.求自然對數(shù)
LOG() 函數(shù)用來計算一個數(shù)的自然對數(shù)值。
SELECT LOG(56.67) logValue;?
21.求以 10 為底的對數(shù)
SELECT LOG10(56.67) log10Value;?
二、字符串函數(shù)
1.計算字符串長度
SELECT LEN('abc');?
2.字符串轉(zhuǎn)換為小寫
SELECT LOWER('A');?
3.字符串轉(zhuǎn)換為大寫
SELECT UPPER('a');?
4.截去字符串左側(cè)空格
SELECT LTRIM(' a ');?
5.截去字符串右側(cè)空格
SELECT RTRIM(' a ');?
6.截去字符串兩側(cè)的空格
SELECT RTRIM(LTRIM(' a '));?
? 7.取子字符串
SUBSTRING(string, start_position, length)
SELECT 'abcdef',SUBSTRING('abcdef', 2, 3);?
8.計算子字符串的位置
SELECT CHARINDEX('ly', 'Kelly'),CHARINDEX('m', 'Smith');?
9.從左側(cè)開始取子字符串
LEFT(string, length)
SELECT LEFT('abcdef', 3);?
10.從右側(cè)開始取子字符串
RIGHT(string,length)
SELECT RIGHT('abcdef', 3);?
11.字符串替換
REPLACE(string, string_tobe_replace, string_to_replace)
SELECT REPLACE(' abc def', ' ', '');?
? 12.得到字符的 ASCII 碼
? ASCII() 函數(shù)用來得到一個字符的 ASCII 碼,它有且只有一個參數(shù),這個參數(shù)為待求 ASCII 碼的字符,如果參數(shù)為一個字符串則函數(shù)返回第一個字符的 ASCII 碼。
SELECT ASCII('a'),ASCII('abc');?
13.得到一個 ASCII 碼數(shù)字對應(yīng)的字符
與 ASCII() 函數(shù)正好相反,獲取得到一個字符的 ASCII 碼。
SELECT CHAR(56) char1,CHAR(90) char2,CHAR(ASCII('a')) char3;14.轉(zhuǎn)換為整數(shù)
SELECT CEILING(90.021) ceilingValue;?
15.發(fā)音匹配度
有的時候我們并不知道一個人姓名的準(zhǔn)確拼寫,只知道它的發(fā)音,這是在公安、醫(yī)療、教育等系統(tǒng)中是經(jīng)常需要的功能。
SELECT SOUNDEX('jack') jackSoundexValue,SOUNDEX('jeck') jeckSoundexValue, SOUNDEX('joke') jockSoundexValue,SOUNDEX('juke') jukeSoundexValue,SOUNDEX('look') lookSoundexValue,SOUNDEX('jobe') jobeSoundexValue;?
DIFFERENCE() 用來簡化兩個字符串的發(fā)音相似度比較,它可以計算兩個字符串的發(fā)音特征值,并且比較它們,然后返回一個 0 至 4 之間的一個值來反映兩個字符串的發(fā)音相似度,這個值越大則表示兩個字符串發(fā)音思想度越大。
SELECT DIFFERENCE('Kerry', 'Merry') diffValue1,DIFFERENCE('Jim', 'Merry') diffValue2;?
三、日期時間函數(shù)
1.取得當(dāng)前日期時間的函數(shù) GETDATE()
SELECT GETDATE(); SELECT CONVERT(VARCHAR(50), GETDATE(), 101) AS 當(dāng)前日期,CONVERT(VARCHAR(50), GETDATE(), 108) AS 當(dāng)前時間;?
2.日期增減?
SELECT GETDATE(),DATEADD(YEAR, 3, GETDATE()) AS time1,DATEADD(QUARTER, 20, GETDATE()) AS time2,DATEADD(MONTH, 68, GETDATE()) AS time3,DATEADD(WEEK, -1000, GETDATE()) AS time4;?
3.計算日期差額
SELECT GETDATE(),DATEDIFF(YEAR, '1992-06-01 00:00:00', GETDATE()) '年份',DATEDIFF(QUARTER, '1992-06-01 00:00:00', GETDATE()) '季度',DATEDIFF(MONTH, '1992-06-01 00:00:00', GETDATE()) '月份',DATEDIFF(DAYOFYEAR, '1992-06-01 00:00:00', GETDATE()) '每年的某一日',DATEDIFF(DAY, '1992-06-01 00:00:00', GETDATE()) '日期',DATEDIFF(WEEK, '1992-06-01 00:00:00', GETDATE()) '星期',DATEDIFF(WEEKDAY, '1992-06-01 00:00:00', GETDATE()) '工作日',DATEDIFF(HOUR, '1992-06-01 00:00:00', GETDATE()) '小時',DATEDIFF(MINUTE, '1992-06-01 00:00:00', GETDATE()) '分鐘',DATEDIFF(SECOND, '1992-06-01 00:00:00', GETDATE()) '秒';?
4.計算一個日期是星期幾
SELECT GETDATE(),DATENAME(YEAR, GETDATE()) '年份',DATENAME(QUARTER, GETDATE()) '季度',DATENAME(MONTH, GETDATE()) '月份',DATENAME(DAYOFYEAR, GETDATE()) '每年的某一日',DATENAME(DAY, GETDATE()) '日期',DATENAME(WEEK, GETDATE()) '星期',DATENAME(WEEKDAY, GETDATE()) '工作日',DATENAME(HOUR, GETDATE()) '小時',DATENAME(MINUTE, GETDATE()) '分鐘',DATENAME(SECOND, GETDATE()) '秒',DATENAME(MILLISECOND, GETDATE()) '毫秒';?
5.取得日期的指定部分
DATEPART() ?函數(shù)的返回值是數(shù)字而 DATENAME() ?函數(shù)則會將盡可能的以名稱的方式做為返回值。
SELECT GETDATE(),DATEPART(YEAR, GETDATE()) '年份',DATEPART(QUARTER, GETDATE()) '季度',DATEPART(MONTH, GETDATE()) '月份',DATEPART(DAYOFYEAR, GETDATE()) '每年的某一日',DATEPART(DAY, GETDATE()) '日期',DATEPART(WEEK, GETDATE()) '星期',DATEPART(WEEKDAY, GETDATE()) '工作日',DATEPART(HOUR, GETDATE()) '小時',DATEPART(MINUTE, GETDATE()) '分鐘',DATEPART(SECOND, GETDATE()) '秒',DATEPART(MILLISECOND, GETDATE()) '毫秒';?
四、其他函數(shù)
1.類型轉(zhuǎn)換
CAST ( expression AS data_type)
CONVERT ( data_type, expression)
SELECT CAST('-30' AS INT) AS v1,CONVERT(DECIMAL, '3.1415726') AS v2,CONVERT(DATETIME, '2008-08-08 08:09:10') AS v3;?
2.空值處理
COALESCE ( expression, value1, value2……, valuen)
SELECT COALESCE('', GETDATE()) v1,COALESCE(NULL, GETDATE()) v2,COALESCE(NULL, '2008-08-08', GETDATE()) v3;NULLIF() 函數(shù)
NULLIF ( expression1, expression2 )
DECLARE @nullIfExpression DATETIME = NULL; SELECT NULLIF('1981-03-22 00:00:00.0', GETDATE()) v1,NULLIF(GETDATE(), '1981-03-22 00:00:00.0') v2,NULLIF(@nullIfExpression, GETDATE()) v3,NULLIF(GETDATE(), @nullIfExpression) v4,NULLIF(@nullIfExpression, @nullIfExpression) v5;?
3.CASE 函數(shù)
CASE expressionWHEN value1 THEN returnvalue1WHEN value2 THEN returnvalue2WHEN value3 THEN returnvalue3……ELSE defaultreturnvalueENDDECLARE @caseName NVARCHAR(100) = 'TONY'; SELECT (CASE @caseNameWHEN 'TONY' THEN'Tony'WHEN 'MILI' THEN'MiLi'ELSE'Other'END) AS Name; DECLARE @caseAge INT = 20; SELECT (CASEWHEN @caseAge > 60 THEN'老人'WHEN @caseAge > 30 THEN'中年'WHEN @caseAge >= 18 THEN'壯丁'ELSE'小屁孩'END) AS '稱謂';
?
4.PATINDEX() 函數(shù)
SELECT 'Tom',PATINDEX('%_m%', 'Tom') UNION SELECT 'Lily',PATINDEX('%_m%', 'Lily');?
5.REPLICATE() 函數(shù)
SELECT 'Jim',REPLICATE('Jim', 1) UNION SELECT 'Tony',REPLICATE('Tony', 2);?
6.REVERSE() 字符串顛倒
SELECT 'Jim',REVERSE('Jim') UNION SELECT 'Tony',REVERSE('Tony');?
7.ISDATE() 函數(shù)
ISDATE() 函數(shù)用來確定輸入表達(dá)式是否為有效日期。如果輸入表達(dá)式是有效日期,那么 ISDATE 返回 1;否則,返回 0。
ISDATE ( expression )
SELECT ISDATE(NULL) AS d1,ISDATE('13/43/3425') AS d2,ISDATE('1995-10-1a') AS d3,ISDATE(19920808) AS d4,ISDATE('1/23/95') AS d5,ISDATE('1995-10-1') AS d6,ISDATE('19920808') AS d7,ISDATE(' Abc') AS d8;?
8.ISNUMERIC() 函數(shù)
ISNUMERIC(expression) 函數(shù)用來確定表達(dá)式是否為有效的數(shù)值類型。如果輸入表達(dá)式的計算值為有效的整數(shù)、浮點數(shù)、money 或 decimal 類型時,ISNUMERIC 返回 1;否則返回 0。
SELECT ISNUMERIC(NULL) AS d1,ISNUMERIC('13/43/3425') AS d2,ISNUMERIC('30a.8') AS d3,ISNUMERIC(19920808) AS d4,ISNUMERIC('1/23/95') AS d5,ISNUMERIC('3E-3') AS d6,ISNUMERIC('19920808') AS d7,ISNUMERIC('-30.3') AS d8;?
9.輔助功能函數(shù)
APP_NAME() 函數(shù) 返回當(dāng)前會話的應(yīng)用程序名稱;
CURRENT_USER 函數(shù)(注意這個函數(shù)不能帶括號調(diào)用)返回當(dāng)前登陸用戶名;
HOST_NAME() 函數(shù) 返回工作站名。
?
?
【參考】《程序員的SQL金典》
?
總結(jié)
以上是生活随笔為你收集整理的[SQL] 函数整理(T-SQL 版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE 条件注释
- 下一篇: 阿里云Redis (安装包安装篇)