zoukankan      html  css  js  c++  java
  • SQL SERVER其它函数

    本篇文章还是学习《程序员的SQL金典》内容的记录,此次将讲解的是SQL SERVER常用的其它函数。(其它数据库这里就不罗列了,想看更多的可以关注《程序员的SQL金典》)。

    具体的其他函数包括:类型转换的函数、空值处理的函数、流程控制函数、SQL SERVER独有函数。

      类型转换的函数

     CAST ( expression AS data_type)函数         CONVERT ( data_type, expression)函数

    上面两个函数都是SQL SERVER提供的支持类型转换的函数。参数expression为待进行类型转换的表达式(即需要待转换的数据),而data_type为转换的目标类型(即待转换后的类型)。

    SELECT
    CAST('-30' AS INTEGER) as i,
    CONVERT(DECIMAL,'3.1415726') as d,
    CONVERT(DATETIME,'2008-08-08 08:09:10') as dt
      空值处理的函数

    COALESCE ( expression,value1,value2……,valuen)函数:处理空值问题的函数,返回包括expression在内的所有参数中的第一个非空表达式。其中expression为待检测的表达式,而其后的参数个数不固定,可以多个。如果expression不为空值则返回expression;否则判断value1是否为空,如果不为空值则返回value1;否则判断value2是否为空,如果不为空值则返回value2;……以此类推,如果COALESCE函数里的参数全为NULL就会出错了,因为COALESCE函数的功能其实就是为了避免出现不想要的NULL值。

    SELECT FName,FBirthDay,FRegDay,
    COALESCE(FBirthDay,FRegDay,'2008-08-08') AS ImportDay
    FROM T_Person

     ISNULL(expression,value)函数:这个函数也是空值处理的函数,是COALESCE( )函数的简化版,只支持两个参数。其中expression为待检测的表达式,如果expression不为空值则返回expression,否则判断value是否为空,如果不为空值则返回value,如果都为空,则返回空。

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

     NULLIF ( expression1 , expression2 )函数:这个函数也是空值处理的函数,主要是判断两个表达式是否等价,如果等价,则返回空,如果不等价,侧返回第一个expression1的值。需要注意的意,第一个表达式expression1不能为空。

    SELECT FBirthDay,FRegDay,
    NULLIF(FBirthDay,FRegDay)
    FROM T_Person
      流程控制函数

     SQL SERVER提供了流程控制函数,类似于我们代码里面的的SWITCH……CASE语句。那就是CASE函数,这个函数有如下两种运用方法。

     CASE函数的语法如下:

    用法一:

    CASE expression
    WHEN value1 THEN returnvalue1
    WHEN value2 THEN returnvalue2
    WHEN value3 THEN returnvalue3
    ……
    ELSE defaultreturnvalue
    END

     CASE函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1,如果expression等于value2则返回returnvalue2,expression等于value3则返回returnvalue3,……以此类推,如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。

    SELECT
    FName,
    (CASE FName
    WHEN 'Tom' THEN 'GoodBoy'
    WHEN 'Lily' THEN 'GoodGirl'
    WHEN 'Sam' THEN 'BadBoy'
    WHEN 'Kerry' THEN 'BadGirl'
    ELSE 'Normal'
    END) as isgood
    FROM T_Person

     用法二:

    CASE
    WHEN condition1 THEN returnvalue1
    WHEN condition 2 THEN returnvalue2
    WHEN condition 3 THEN returnvalue3
    ……
    ELSE defaultreturnvalue
    END

    其中的condition1 、condition 2、condition 3……为条件表达式,CASE函数对各个表达式从前向后进行测试,如果条件condition1为真则返回returnvalue1,否则如果条件condition2为真则返回returnvalue2,否则如果条件condition3为真则返回returnvalue3,……以此类推,如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。

    SELECT
    FName,
    FWeight,
    (CASE
    WHEN FWeight<40 THEN 'thin'
    WHEN FWeight>50 THEN 'fat'
    ELSE 'ok'
    END) as isnormal
    FROM T_Person
      SQL SERVER独有函数

     PATINDEX ( '%pattern%' , expression )函数:不同于CHARINDEX()函数,只能计算字符串中指定表达式的开始位置。PATINDEX ( '%pattern%' , expression )函数提供了更加灵活的方式,它返回指定表达式中模式'%pattern%'第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。在模式中可以使用通配符。

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

     REPLICATE (str,count)函数:用来得到一个由子字符串重复了若干次所组成的字符串,其中参数str为子字符串,而count为重复次数。(其实就是一个复制函数)。

    SELECT FName,FWeight,
    CAST(FWeight/20 AS INT),
    REPLICATE(FName, CAST(FWeight/20 AS INT))
    FROM T_Person

     REVERSE(expression)函数:将一个字符串的顺序颠倒。

    SELECT FName, REVERSE(FName)
    FROM T_Person

     ISDATE(expression)函数:用来确定输入表达式是否为有效日期。如果输入表达式是有效日期,那么ISDATE 返回 1;否则,返回 0。expression参数为要验证其是否为日期的表达式。expression可以是text、ntext 表达式和image 表达式以外的任意表达式,可以隐式转换为nvarchar。

    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('19920808') as d7,
    ISDATE(' Abc') as d8

     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('19920808') as d7,
    ISNUMERIC('-30.3') as d8
  • 相关阅读:
    leetcode204-统计质数个数之一步步调试超时
    SpringBoot-注解一句话
    算法-总结规律
    kafka-版本变更相关
    异步线程池如何做同步业务
    es-快捷DSL检索手记
    并发学习第七篇——ThreadPoolExecutor
    kafka-consumer端的设计细节
    kafka-producer使用总结
    kafka-topic重要配置分析
  • 原文地址:https://www.cnblogs.com/csdbfans/p/3481045.html
Copyright © 2011-2022 走看看