函数整理(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 expression
  WHEN value1 THEN returnvalue1
  WHEN value2 THEN returnvalue2
  WHEN value3 THEN returnvalue3
  ……
  ELSE defaultreturnvalue
  END

  

DECLARE @caseName NVARCHAR(100) = 'TONY';
SELECT (CASE @caseName
WHEN 'TONY' THEN
'Tony'
WHEN 'MILI' THEN
'MiLi'
ELSE
'Other'
END
) AS Name;

DECLARE @caseAge INT = 20;
SELECT (CASE
WHEN @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('') 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('') AS d7,
ISNUMERIC('-30.3') AS d8;

  9.辅助功能函数

  APP_NAME() 函数 返回当前会话的应用程序名称;
  CURRENT_USER 函数(注意这个函数不能带括号调用)返回当前登陆用户名;
  HOST_NAME() 函数 返回工作站名。

SELECT APP_NAME() AppName,
CURRENT_USER CurrentUser,
HOST_NAME() HostName,
NEWID() UUID;


【参考】《程序员的SQL金典》

[SQL] 函数整理(T-SQL 版)的更多相关文章

  1. Oracle常用SQL函数整理

    --返回ASCII码select  ASCII('A') "A的ASCII码" ,ASCII('a') "a的ASSCII码" from dual ; --反向 ...

  2. Java进阶SQL函数、网页定时刷新与自定义JSTL函数

    一.SQL函数 能够在SQL语句中调用的函数(方法) ,用来实现一些小功能 聚合函数 能够把多行数据聚合成一个值(统计) count()    计数,计算数据条数 max()      计算最大值 m ...

  3. mysql学习笔记—常用sql函数

    SQL 拥有很多可用于计数和计算的内建函数. SQL Aggregate 函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的值. 有用的 Aggregate 函数: AVG() ...

  4. 理解Spark SQL(三)—— Spark SQL程序举例

    上一篇说到,在Spark 2.x当中,实际上SQLContext和HiveContext是过时的,相反是采用SparkSession对象的sql函数来操作SQL语句的.使用这个函数执行SQL语句前需要 ...

  5. sql注入知识点整理(基础版)

    sql注入知识点整理(基础版) 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and (se ...

  6. 一个项目涉及到的50个Sql语句(整理版)

    /* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测试数据进行过测试,最好每次只单独运行一个语句. */ --1.学生表Student(S,Sname,Sage,Sse ...

  7. SQL函数说明大全

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  8. oracle(sql)基础篇系列(一)——基础select语句、常用sql函数、组函数、分组函数

        花点时间整理下sql基础,温故而知新.文章的demo来自oracle自带的dept,emp,salgrade三张表.解锁scott用户,使用scott用户登录就可以看到自带的表. #使用ora ...

  9. SQL语句学习手册实例版

    SQL语句学习手册实例版 表操作 例1  对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE  TABLE  STUDENTS (SNO      NUMERIC (6, ...

随机推荐

  1. 如何识别IDA反汇编中遇到的动态链接库中的函数

    在使用IDA静态反汇编时,如果正在逆向的文件中有动态链接库函数(比如调用了程序自定义so库中的函数),IDA只会显示一个地址,跟进去会发现是延迟绑定中关于plt的代码,无法知道具体调用了哪个函数,对于 ...

  2. django笔记整理

    Django复习: MTV模型: manager启动服务→urls找到路径→(找到views视图函数或者做路由分发)→视图函数处理相关逻辑,返回一个模板或者是字符串: ---------------- ...

  3. 学习web前端技术的笔记,仅供自己查阅备忘,移动对font-size的控制(并非原创)

    假设根字体font-size的值是40px, 640/40=16,16就是px换算rem的值 function initHtmlFontSize(){ //获取可可视屏幕的宽度 var _width= ...

  4. hackerrank 训练军队

    高阶传送魔法 在神奇的Kasukabe国家,人们努力拥有一个技能.一共有N个类型的技能,并且开始的时候拥有第 i 种技能的人有Ci个 . 这个国家有T个巫师,他们有能力将一个人的技能进行转换.每个巫师 ...

  5. 51 NOD 1238 最小公倍数之和 V3

    原题链接 最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊! 然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧…… (然而并不怎么会用什么公式编辑器,写得丑也凑合着看吧…… ...

  6. 51Nod 1091 线段的重叠(贪心+区间相关,板子题)

    1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...

  7. 【Java学习笔记之八】JavaBean中布尔类型使用注意事项

    JavaBean是一个标准,遵循标准的Bean是一个带有属性和getters/setters方法的Java类. JavaBean的定义很简单,但是还有有一些地方需要注意,例如Bean中含有boolea ...

  8. jquery 和 mui 上拉加载

    jquery: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <m ...

  9. mybatis sql循环的使用

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  10. Spark性能调优之解决数据倾斜

    Spark性能调优之解决数据倾斜 数据倾斜七种解决方案 shuffle的过程最容易引起数据倾斜 1.使用Hive ETL预处理数据    • 方案适用场景:如果导致数据倾斜的是Hive表.如果该Hiv ...