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

时间:2014-03-01 06:26:16   收藏:0   阅读:657

一、数学函数


1.RAND

bubuko.com,布布扣
SELECT RAND () ---0.302870228294199
bubuko.com,布布扣

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

2.小数取整

bubuko.com,布布扣
SELECT TOP 3 FWeight, CEILING(FWeight ),FLOOR( FWeight) FROM T_Person
bubuko.com,布布扣

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

bubuko.com,布布扣
SELECT TOP 3 FWeight, ROUND(FWeight ,2), ROUND(FWeight ,-1) FROM T_Person
bubuko.com,布布扣

结果:

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

3.SIGN():求符号

bubuko.com,布布扣
SELECT FWeight ,SIGN( FWeight-50 )as >50 FROM T_Person
bubuko.com,布布扣

结果:

FWeight     >50
56.67     1.00
36.17     -1.00

4.取余:

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

bubuko.com,布布扣
SELECT FWeight ,FWeight% 10 FROM T_Person
bubuko.com,布布扣

结果:

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

二、字符串函数

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

2.去除空格

bubuko.com,布布扣
SELECT  HELLO  ,LEN(   HELLO  ),LEN (LTRIM(   HELLO  )),LEN (RTRIM( LTRIM(  HELLO   )))
bubuko.com,布布扣

结果:

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

3.截取子串

bubuko.com,布布扣
SELECT FName ,SUBSTRING( FName,2 ,2),LEFT( FName,2 ) as l,RIGHT( FName,2 ) as r FROM T_Person
bubuko.com,布布扣

结果:

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

4.字符串替换

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

bubuko.com,布布扣
SELECT LEN ( HELLO ), LEN(REPLACE ( HELLO ,  ,‘‘ )) --结果6,5
bubuko.com,布布扣

5.ASCII码

bubuko.com,布布扣
SELECT ASCII (A), ASCII(ANY ),CHAR( 90)--65,65,Z
bubuko.com,布布扣

6.发音匹配度 DIFFERENCE

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

例如:

bubuko.com,布布扣
SELECT FName FROM T_Person WHERE DIFFERENCE( FName,Tony )>2
bubuko.com,布布扣

三、日期时间函数

1.GETDATE()--当前时间

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

bubuko.com,布布扣
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
bubuko.com,布布扣

2.DATEADD()--日期增减

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

bubuko.com,布布扣

例如:

bubuko.com,布布扣
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
bubuko.com,布布扣

3.DATEDIFF()--日期差额

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

bubuko.com,布布扣
SELECT FBirthDay ,FRegDay, DATEDIFF(YEAR ,FBirthDay, FRegDay) AS UserAge FROM T_Person
bubuko.com,布布扣

结果:

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为要计算的目标日期。

bubuko.com,布布扣
SELECT GETDATE () AS NOW, DATENAME(YEAR ,GETDATE()) AS YEAR,DATENAME (DAY, GETDATE()) AS 日期 ,DATENAME( WEEKDAY,GETDATE ()) AS WEEKDAY,DATENAME (QUARTER, GETDATE()) AS 季度
bubuko.com,布布扣

结果:

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

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

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

bubuko.com,布布扣
SELECT GETDATE () AS NOW, DATEPART(YEAR ,GETDATE()) AS YEAR,DATEPART (DAY, GETDATE()) AS 日期 ,DATEPART( WEEKDAY,GETDATE ()) AS WEEKDAY, DATEPART(QUARTER ,GETDATE()) AS 季度
bubuko.com,布布扣

四、其他函数

1. 类型转换

bubuko.com,布布扣
SELECT FIdNumber ,CAST(RIGHT( FIdNumber,4 ) AS INT), Convert(INT ,RIGHT(FIdNumber, 4))%2 FROM T_Person
bubuko.com,布布扣

结果:

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

2.空值处理

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

例如:

bubuko.com,布布扣
SELECT FBirthDay ,FRegDay, COALESCE(FBirthDay ,FRegDay, 1900-1-1) FROM T_Person
bubuko.com,布布扣

结果:

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.

例如:

bubuko.com,布布扣
SELECT FBirthDay ,FRegDay, ISNULL(FBirthDay ,FRegDay) FROM T_Person
bubuko.com,布布扣

结果:

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.

实例:

bubuko.com,布布扣
SELECT NULLIF (1, 1),NULLIF (1, 2),NULLIF (1,NULL)  --返回NULL,1,1
bubuko.com,布布扣

3.SQL Server独有函数

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

例如:

bubuko.com,布布扣
SELECT FName ,PATINDEX( %_i%,FName ) FROM T_Person
bubuko.com,布布扣

结果:

bubuko.com,布布扣

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

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

例如:

bubuko.com,布布扣
SELECT FName ,REPLICATE( FName,3 ),FNAME+ SPACE(5 )+FNAME FROM T_Person
bubuko.com,布布扣

bubuko.com,布布扣

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

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

读《程序员的SQL金典》[2]--函数,布布扣,bubuko.com

原文:http://www.cnblogs.com/janes/p/3574025.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!