读《程序员的SQL金典》[2]--函数
一、数学函数
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:返回当前登录用户名。
读《程序员的SQL金典》[2]--函数的更多相关文章
- 读《程序员的SQL金典》[1]--基础数据检索
前言 <程序员的SQL金典>这本书是杨中科老师的,拜读了一下,简单做了读书笔记供以后翻阅.仅供学习分享,要想细读的话推荐购买原版呀! 这次读书的时候用了新的办法把看书计划进行了量化,虽然简 ...
- 读《程序员的SQL金典》[4]--SQL调优
一.SQL注入 如果程序中采用sql拼接的方式书写代码,那么很可能存在SQL注入漏洞.避免的方式有两种: 1. 对于用户输入过滤敏感字母: 2. 参数化SQL(推荐). 二.索引 ①索引分类 聚簇索引 ...
- 读《程序员的SQL金典》[3]--表连接、子查询
一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...
- 【程序员的SQL金典】笔记(第6章~第11章)
第六章 索引与约束 1.索引用来提高数据的检索速度,而约束则用来保证数据的完整性. 2.创建索引 创建索引的SQL 语句是CREATE INDEX,其语法如下: CREATE INDE ...
- 【程序员的SQL金典】笔记(第1章~第5章)
第一章数据库入门 1.概念: 数据库 表 列 记录(行) 主键 索引 第二章 数据表的创建和管理 1.数据库系统中的数据类型大致可以分为五类:整数.数值.字符相关.日期时间以及二进 ...
- 程序员的sql金典
1.数据库基础概念 2.数据类型 3.通过SQL语句管理数据表 4.数据的增删改 5.Select的基本用法 6.高级数据过滤 7.数据分组 8.限制结果集行数和抑制重复数据 9.计算字段 10.不从 ...
- 面向.Net程序员的Sql版本管理
代码版本管理基本上程序员们都知道 TFS GIT SVN等等 但是对于数据库版本管理 java程序员或许会了解一些 但是.Net程序员收获的资料应该不多. 特别是现在云概念使用越来越广的情况下,与应用 ...
- 黑马程序员——C语言基础 scanf函数 基本运算 三目运算符
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (一下内容是对黑马苹果入学视频的个人知识点总结) (一)scanf函数 1> 简单介绍一下scanf函数 这是在 ...
- 黑马程序员——JAVA基础之主函数main和静态static,静态代码块
------- android培训.java培训.期待与您交流! ---------- 主函数:是一个特殊的函数.作为程序的入口,可以被jvm调用. 主函数的定义: public:代表着该函数访问权限 ...
随机推荐
- ASP.NET c# Redis 开发
Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redis纯粹为应用而产生,它是一个高性能的 ...
- SVN 多项目管理(强烈建议每个项目建一个库)
Subversion的目录结构是很自由的,所有的规划都必须是你自己规定,考虑一个 subversion仓库的目录树,你可以把任何一个目录认定为一个项目,你可以只checkout这个目录下的所有文件进行 ...
- vue.js入门(3)——组件通信
5.2 组件通信 尽管子组件可以用this.$parent访问它的父组件及其父链上任意的实例,不过子组件应当避免直接依赖父组件的数据,尽量显式地使用 props 传递数据.另外,在子组件中修改父组件的 ...
- 在 ASP.NET 中使用 jQuery.load() 方法
今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...
- 十、Java基础---------面向对象之抽象类与接口
抽象类(abstract) 当编写一个类时,时常会为该类定义一些方法,这些方法的使用用以描述该类的行为方式,那么这些方法都有具体的方法体.但是在某些情况下,某个父类只是知道子类应该包含怎样的方 ...
- iOS禁用第三方键盘
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)ext ...
- SQL学习指南 ——笔记
前言:每章的练习题很实用,跟着练了一遍.答案附录有 1.流行的商业级关系数据库:
- 自己封装的 recyclerView的 BaseAdapter,带item点击和长按事件。
第一种是把创建viewholder的步骤给子类来做. 第二种是参照陈宇明的博客,试着只暴露给子类设置holder属性的方法.(还未测试条目中控件的点击事件能否成功) 代码如下: /** * Creat ...
- HTML5视频播放在ios下浮动元素无法点击的解决方案
最近许多人在微博上问到在iPad.iPhone.iTouch等设备上使用HTML5播放视频,在视频上方悬浮一个div元素,div内的元素无法点击的情况,而在PC浏览器上没有这个问题. 这个现象是设备特 ...
- android常见问题
1.广播接收器中启动Activity,需要在intent中添加FLAG_ACTIVITY_NEW_TASK /** * Demo描述: * 在BroadcastReceiver中启动Activity的 ...