zoukankan      html  css  js  c++  java
  • 读《程序员的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可以理解为加减的单位。

    Image

    例如:

    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

    结果:

    Image(1)

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

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

    例如:

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

    Image(2)

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

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

  • 相关阅读:
    C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)
    非软件行业公司自建软件开发部门能力不强的原因分析
    编程经验点滴----巧妙解决 Oracle NClob 读写问题
    编程经验点滴----在 Oracle 数据库中保存空字符串
    这几天上海移动网络可以直接打开 Google Play 了
    品牌电脑硬盘损坏后,使用MediaCreationTool从微软官方下载正版Windows到USB做安装盘
    编程经验点滴----使用接口表保存可能并发的业务,然后顺序处理
    生产打印系统的一些汇总--商业合同方面
    生产打印系统的一些汇总--概要
    外观模式
  • 原文地址:https://www.cnblogs.com/janes/p/3574025.html
Copyright © 2011-2022 走看看