一、数学函数


1.RAND

SELECT RAND () ---0.302870228294199

取0-1之间的随机小数。

2.小数取整

  • CEILINT(data)舍掉小数部分并向上取整。
  • FLOOR(data)舍掉小数部分并向下取整。
SELECT TOP 3 FWeight, CEILING(FWeight ),FLOOR( FWeight) FROM T_Person

  • Round(m,d):四舍五入对小数进行取整。

参数说明:m为带处理的数据,d为四舍五入时保留的小数位数,为负数时表示对整数进行四舍五入。

SELECT TOP 3 FWeight, ROUND(FWeight ,2), ROUND(FWeight ,-1) FROM T_Person

结果:

FWeight     (无列名)     (无列名)
56.67     56.67     60.00
36.17     36.17     40.00
40.33     40.33     40.00

3.SIGN():求符号

SELECT FWeight ,SIGN( FWeight-50 )as '>50' FROM T_Person

结果:

FWeight     >50
56.67     1.00
36.17     -1.00

4.取余:

在SQL Server中,使用百分号%来实现取余操作。

SELECT FWeight ,FWeight% 10 FROM T_Person

结果:

FWeight     (无列名)
56.67     6.67
36.17     6.17
40.33     0.33

二、字符串函数

1.LEN(str):计算字符串长度。

2.去除空格

  • LTRIM(str):去掉字符串左侧空格。
  • RTRIM(str):去掉字符串右侧空格。
SELECT ' HELLO ' ,LEN( '  HELLO  '),LEN (LTRIM( '  HELLO  ')),LEN (RTRIM( LTRIM('  HELLO  ' )))

结果:

(无列名)     (无列名)     (无列名)     (无列名)
HELLO             7                5                5

3.截取子串

  • SUBSTRING(str,start,length):取子字符串。其中start从1开始计算,length为子串长度。
  • LEFT(str,length):从最左侧开始截取子串。
  • RIGHT(str,length):从最右侧开始截取子串。
SELECT FName ,SUBSTRING( FName,2 ,2),LEFT( FName,2 ) as l,RIGHT( FName,2 ) as r FROM T_Person

结果:

FName     (无列名)     l     r
Lily     il     Li     ly
Kelly     el     Ke     ly
Sam     am     Sa     am

4.字符串替换

REPLACE(str,old,new):str为要替换的原字符串,old为要被替换的字符串部分,new是用来替换的新字符串。

SELECT LEN (' HELLO '), LEN(REPLACE (' HELLO ', ' ','' )) --结果6,5

5.ASCII码

  • ASCII(char)计算字符的ASCII码,如果参数是一个字符串,则返回第一个字母的ASCII码。
  • CHAR(num)正好相反,是根据ASCII码数值计算对应的字符。
SELECT ASCII ('A'), ASCII('ANY' ),CHAR( 90)--65,65,Z

6.发音匹配度 DIFFERENCE

在SQL Server中使用DIFFERENCE方法查询两个字符串的发音相似度。该方法计算两个字符串的发音特征值并进行比较,然后返回一个0-4之间的整数,这个数字越大表示两个字符串发音越相似。

例如:

SELECT FName FROM T_Person WHERE DIFFERENCE( FName,'Tony' )>2

三、日期时间函数

1.GETDATE()--当前时间

SQL Server中取得当前时间的函数GETDATE(),可以使用CONVERT函数对其格式进行处理。

SELECT GETDATE () --2014-02-17 12:44:39.933
SELECT CONVERT (VARCHAR( 50),GETDATE (),101) AS NOWDATE --02/17/2014
SELECT CONVERT (VARCHAR( 50),GETDATE (),108) AS NOWDATE --12:44:39

2.DATEADD()--日期增减

DATEADD(datepart,number,date):date为要计算的日期,number为加减日期数,datepart可以理解为加减的单位。

例如:

SELECT FBirthDay ,DATEADD( YEAR,1 ,FBirthDay) FROM T_Person
SELECT FBirthDay ,DATEADD( QUARTER,2 ,FBirthDay) FROM T_Person
SELECT FBirthDay ,DATEADD( WEEK,-2 ,FBirthDay) FROM T_Person

3.DATEDIFF()--日期差额

DATEDIFF(datedepart,startdate,enddate):其中datedepart含义同DATEADD参数,startdate和enddate为相减的两个日期。

SELECT FBirthDay ,FRegDay, DATEDIFF(YEAR ,FBirthDay, FRegDay) AS UserAge FROM T_Person

结果:

FBirthDay                                  FRegDay                              UserAge
1981-03-22 00:00:00.000     1998-05-01 00:00:00.000     17
1987-01-18 00:00:00.000     1999-08-21 00:00:00.000     12
1987-11-08 00:00:00.000     2001-09-18 00:00:00.000     14

4.DATENAME()--计算日期名称

DATENAME(datedepart,date):datedepart参数同DATEADD,date为要计算的目标日期。

SELECT GETDATE () AS NOW, DATENAME(YEAR ,GETDATE()) AS YEAR,DATENAME (DAY, GETDATE()) AS 日期 ,DATENAME( WEEKDAY,GETDATE ()) AS WEEKDAY,DATENAME (QUARTER, GETDATE()) AS 季度

结果:

NOW                                        YEAR     日期     WEEKDAY     季度
2014-02-17 13:57:56.127     2014     17        星期一               1

5.DATEPART()--取得日期指定部分

DATEPART(datedepart,date):datedepart参数同DATEADD,date为要计算的目标日期。该方法和DATENAME类似,不过DATEPART返回值是数字,而DATENAME尽量返回的名称。

SELECT GETDATE () AS NOW, DATEPART(YEAR ,GETDATE()) AS YEAR,DATEPART (DAY, GETDATE()) AS 日期 ,DATEPART( WEEKDAY,GETDATE ()) AS WEEKDAY, DATEPART(QUARTER ,GETDATE()) AS 季度

四、其他函数

1. 类型转换

  • CAST(exp AS datetype)
  • CONVERT(datetype,exp)
SELECT FIdNumber ,CAST(RIGHT( FIdNumber,4 ) AS INT), Convert(INT ,RIGHT(FIdNumber, 4))%2 FROM T_Person

结果:

FIdNumber     (无列名)     (无列名)
123456789120     9120     0
123456789121     9121     1
123456789122     9122     0

2.空值处理

①COALESCE(exp,val1,val2....):参数个数不固定。如果exp为null则返回val1,如果val1为null则返回val2...以此类推。如果所有值都为null,则返回null。

例如:

SELECT FBirthDay ,FRegDay, COALESCE(FBirthDay ,FRegDay, '1900-1-1') FROM T_Person

结果:

FBirthDay                                 FRegDay                                  (无列名)
1982-07-12 00:00:00.000     2000-03-01 00:00:00.000     1982-07-12 00:00:00.000
1983-02-16 00:00:00.000     1998-05-01 00:00:00.000     1983-02-16 00:00:00.000
NULL                                        1999-03-01 00:00:00.000     1999-03-01 00:00:00.000
NULL                                        NULL                                         1900-01-01 00:00:00.000
1972-07-18 00:00:00.000     1995-06-19 00:00:00.000     1972-07-18 00:00:00.000

②ISNULL(exp1,exp2):如果exp1值为NULL,则返回exp2.

例如:

SELECT FBirthDay ,FRegDay, ISNULL(FBirthDay ,FRegDay) FROM T_Person

结果:

FBirthDay                                FRegDay                                      (无列名)
1982-07-12 00:00:00.000     2000-03-01 00:00:00.000     1982-07-12 00:00:00.000
1983-02-16 00:00:00.000     1998-05-01 00:00:00.000     1983-02-16 00:00:00.000
NULL                                         1999-03-01 00:00:00.000     1999-03-01 00:00:00.000
NULL                                         NULL                                         NULL
1972-07-18 00:00:00.000     1995-06-19 00:00:00.000     1972-07-18 00:00:00.000

③NULLIF(exp1,exp2):

如果exp1等于exp2,则返回NULL;否则返回exp1.

实例:

SELECT NULLIF (1, 1),NULLIF (1, 2),NULLIF (1,NULL)  --返回NULL,1,1

3.SQL Server独有函数

①PATINDEX()--可以使用通配符模糊查询某字符串出现的位置,功能比CHARINDEX强大。

例如:

SELECT FName ,PATINDEX( '%_i%',FName ) FROM T_Person

结果:

②REPLICATE(str,count):将一个字符串str重复count次。

SPACE(N):将空格重复N次。

例如:

SELECT FName ,REPLICATE( FName,3 ),FNAME+ SPACE(5 )+FNAME FROM T_Person

③REVERSE(str):返回字符串的倒序。

④APP_NAME():当前应用程序名称;HOST_NAME():返回工作站名;CURRENT_USER:返回当前登录用户名。

本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/p/3574025.html,如需转载请自行联系原作者

读《程序员的SQL金典》[2]--函数相关推荐

  1. 程序员的mysql金典pdf_程序员的SQL金典

    第一本专门为程序员编写的数据库图书 <程序员的SQL金典> l 将子查询.表连接.数据库语法差异等用通俗易懂.诙谐幽默的语言讲解出来 l 配合大量真实案例,学了就能用,在短时间内成为数据库 ...

  2. 读《程序员的SQL金典》

    [程序员与DBA] DBA需要花很多时间在数据库的备份.授权.调优.修复.监控等内容上,而程序员则应该去掌握SQL语句的使用,而且为了简化系统开发难度,应该学会使用数据库函数.子查询.表联接.开窗函数 ...

  3. 读《程序员的SQL金典》[4]--SQL调优

    一.SQL注入 如果程序中采用sql拼接的方式书写代码,那么很可能存在SQL注入漏洞.避免的方式有两种: 1. 对于用户输入过滤敏感字母: 2. 参数化SQL(推荐). 二.索引 ①索引分类 聚簇索引 ...

  4. 【2022黑马程序员】SQL优化

    [黑马程序员]SQL优化笔记 文章目录 [黑马程序员]SQL优化笔记 插入数据优化 大批量插入数据 总结 主键优化 数据组织方式 页分裂 A. 主键顺序插入效果 B. 主键乱序插入效果 页合并 索引设 ...

  5. 黑马程序员——c语言学习心得——函数传递二维数组

    黑马程序员--c语言学习心得--函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.    变量 ...

  6. python max函数时间复杂度_程序员的思考:用函数还是用复杂表达式

    程序员的思考:用函数还是用复杂表达式 Perl语言的原作者Larry Wall曾经说过,伟大的程序员都有三个优点:懒惰.暴躁和自负.乍一看这三个词语没有一个是褒义词,但在程序员的世界里,这三个词有不同 ...

  7. 程序员的mysql金典pdf_《程序员sql金典》pdf(完整)

    [实例简介] [实例截图] [核心代码] 第 1 章 数据库入门 1 1.1 数据库概述 1 1.1.1 数据库与数据库管理系统 1 1.1.2 数据库能做什么 2 1.1.3 主流数据库管理系统介绍 ...

  8. 读程序员技术练级攻略有感

    原文如下,感想在后面,文中指的博客是我csdn上的博客: ----------------------------------------------------------------------- ...

  9. 程序员必修课--sql思维举重训练

    写sql是程序员基本功课,找工作面试一般必有sql题,实际工作中对sql的需求更是千变万化,所以掌握好sql对于一个程序员来说是件非常重要的事情.本文通过一个简单易懂的关系(学生/课程/成绩关系)尽量 ...

最新文章

  1. 软件过程与项目管理(作业一)
  2. Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制
  3. java的对象对象映射_Java对象到对象映射器
  4. 【APICloud系列|37】百度开放平台应用+,提升用户下载量操作步骤
  5. 计算机网络学习笔记-1.2.3OSI参考模型(2)
  6. scala集合中添加元素_如何在Scala中获得列表的第一个元素?
  7. PHP正则提取table中数据
  8. 文件和目录(二)--unix环境高级编程读书笔记
  9. Qt5_当前exe所在路径
  10. Python 文本挖掘:使用gensim进行文本相似度计算
  11. 测试计算机性能的软件比较专业,用什么软件可以测试计算机的整体性能?
  12. 什么叫java方法重载?
  13. After Effect CC 2019插件
  14. c语言是结构化 模块化的编程语言,结构化程序设计和模块化结构
  15. 一名“老”引擎程序员的昨天、今天和明天
  16. 无锡梅里旅游策划方案——中国第一锡宫!
  17. 计算机专业保研英语自我介绍,计算机专业保研面试英文自我介绍
  18. 计算机 90学时培训总结,90学时培训心得体会
  19. 差劲的 thinkpad t480 2019-2-15 入手
  20. 微信小程序项目启动错误“Error: ENOENT: no such file or directory, open”

热门文章

  1. Linux简单命令收录(who,echo,date)【上】
  2. leetcode45 跳跃游戏II 秒杀所有答案
  3. caffe各层参数详解
  4. python(9)-变量、input函数
  5. 《Python Cookbook 3rd》笔记(5.8):固定大小记录的文件迭代
  6. 可以直接进行运算么_WORD办公技巧:如何直接在WORD中进行加法、乘法运算?
  7. restful风格的增删改查
  8. 2014年英语一作文partB漫画作文
  9. 世纪大争论:Linux还是GNU/Linux?
  10. 怎样在C语言程序中使用功能键和箭头键?