[SQL] 函数整理(T-SQL 版)
函數整理(T-SQL 版)
一、數學函數
1.求絕對值
ABS() 函數用來返回一個數值的絕對值。
SELECT ABS(-5.38) AS absValue;
2.求指數
POWER() ?函數是用來計算指數的函數。該函數接受兩個參數,第一個參數為待求冪的表達式,第二個參數為冪。
SELECT POWER(5, -0.5) AS powerValue1,POWER(5, 2) AS powerValue2,POWER(5, 3) AS powerValue3;?
3.求平方根
SQRT() ?函數是用來計算平方根的函數。該函數接受一個參數,這個參數為待計算平方根的表達式。
SELECT SQRT(9) AS sqrtValue1,SQRT(3) AS sqrtValue2;
4.求隨機數
SELECT RAND(9527) randValue;?
5.舍入到最大整數
SELECT CEILING(56.67) ceilingValue1,CEILING(-56.67) ceilingValue2;?
6.舍入到最小整數
SELECT FLOOR(56.67) floorValue1,FLOOR(-56.67) floorValue2;?
7.四舍五入
ROUND() ?函數也是用來進行數值四舍五入的。
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.弧度制轉換為角度制
SELECT DEGREES(56.67) degreesValue;?
18.角度制轉換為弧度制
SELECT RADIANS(56.67) radiansValue;?
19.求符號
SIGN() 函數用來返回一個數值的符號,如果數值大于 0 則返回 1,如果數值等于 0 則返回 0,如果數值小于 0 則返回-1。
SELECT SIGN(1 - 3) signValue1,SIGN(3 - 1) signValue2,SIGN(0) signValue3;?
20.求自然對數
LOG() 函數用來計算一個數的自然對數值。
SELECT LOG(56.67) logValue;?
21.求以 10 為底的對數
SELECT LOG10(56.67) log10Value;?
二、字符串函數
1.計算字符串長度
SELECT LEN('abc');?
2.字符串轉換為小寫
SELECT LOWER('A');?
3.字符串轉換為大寫
SELECT UPPER('a');?
4.截去字符串左側空格
SELECT LTRIM(' a ');?
5.截去字符串右側空格
SELECT RTRIM(' a ');?
6.截去字符串兩側的空格
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.從左側開始取子字符串
LEFT(string, length)
SELECT LEFT('abcdef', 3);?
10.從右側開始取子字符串
RIGHT(string,length)
SELECT RIGHT('abcdef', 3);?
11.字符串替換
REPLACE(string, string_tobe_replace, string_to_replace)
SELECT REPLACE(' abc def', ' ', '');?
? 12.得到字符的 ASCII 碼
? ASCII() 函數用來得到一個字符的 ASCII 碼,它有且只有一個參數,這個參數為待求 ASCII 碼的字符,如果參數為一個字符串則函數返回第一個字符的 ASCII 碼。
SELECT ASCII('a'),ASCII('abc');?
13.得到一個 ASCII 碼數字對應的字符
與 ASCII() 函數正好相反,獲取得到一個字符的 ASCII 碼。
SELECT CHAR(56) char1,CHAR(90) char2,CHAR(ASCII('a')) char3;14.轉換為整數
SELECT CEILING(90.021) ceilingValue;?
15.發音匹配度
有的時候我們并不知道一個人姓名的準確拼寫,只知道它的發音,這是在公安、醫療、教育等系統中是經常需要的功能。
SELECT SOUNDEX('jack') jackSoundexValue,SOUNDEX('jeck') jeckSoundexValue, SOUNDEX('joke') jockSoundexValue,SOUNDEX('juke') jukeSoundexValue,SOUNDEX('look') lookSoundexValue,SOUNDEX('jobe') jobeSoundexValue;?
DIFFERENCE() 用來簡化兩個字符串的發音相似度比較,它可以計算兩個字符串的發音特征值,并且比較它們,然后返回一個 0 至 4 之間的一個值來反映兩個字符串的發音相似度,這個值越大則表示兩個字符串發音思想度越大。
SELECT DIFFERENCE('Kerry', 'Merry') diffValue1,DIFFERENCE('Jim', 'Merry') diffValue2;?
三、日期時間函數
1.取得當前日期時間的函數 GETDATE()
SELECT GETDATE(); SELECT CONVERT(VARCHAR(50), GETDATE(), 101) AS 當前日期,CONVERT(VARCHAR(50), GETDATE(), 108) AS 當前時間;?
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() ?函數的返回值是數字而 DATENAME() ?函數則會將盡可能的以名稱的方式做為返回值。
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()) '毫秒';?
四、其他函數
1.類型轉換
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() 函數
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 函數
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() 函數
SELECT 'Tom',PATINDEX('%_m%', 'Tom') UNION SELECT 'Lily',PATINDEX('%_m%', 'Lily');?
5.REPLICATE() 函數
SELECT 'Jim',REPLICATE('Jim', 1) UNION SELECT 'Tony',REPLICATE('Tony', 2);?
6.REVERSE() 字符串顛倒
SELECT 'Jim',REVERSE('Jim') UNION SELECT 'Tony',REVERSE('Tony');?
7.ISDATE() 函數
ISDATE() 函數用來確定輸入表達式是否為有效日期。如果輸入表達式是有效日期,那么 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() 函數
ISNUMERIC(expression) 函數用來確定表達式是否為有效的數值類型。如果輸入表達式的計算值為有效的整數、浮點數、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.輔助功能函數
APP_NAME() 函數 返回當前會話的應用程序名稱;
CURRENT_USER 函數(注意這個函數不能帶括號調用)返回當前登陸用戶名;
HOST_NAME() 函數 返回工作站名。
?
?
【參考】《程序員的SQL金典》
?
總結
以上是生活随笔為你收集整理的[SQL] 函数整理(T-SQL 版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IE 条件注释
- 下一篇: 阿里云Redis (安装包安装篇)