zoukankan      html  css  js  c++  java
  • SQL Server进阶(十二)常用函数

    序言

    SELECT datediff(ms, '2019-07-18 14:01:50.867', '2019-07-18 14:01:52.877')

    coalesce函数(下面简称函数),返回一个参数中非空的值

    SELECT  COALESCE(NULL, NULL, GETDATE())  

    由于两个参数都为null,所以返回getdate()函数的值,也就是当前时间。即返回第一个非空的值。由于这个函数是返回第一个非空的值,所以参数里面必须最少有一个非空的值,如果使用下面的查询,将会报错:

    SELECT  COALESCE(NULL, NULL, NULL)  

    生成随机数

    select cast(ceiling(rand(checksum(newid()))*11)as int ) --生成1至11之间任一整数
    cast( floor(rand()*100) as int)  --生成0至99之间任一整数 0至N-1之间
    cast(ceiling(rand() * 100) as int) --生成1至100之间任一整数 1至N之间

    也可以使用top 1

    SET ROWCOUNT 1
    
    SET ROWCOUNT 0

     FOR XML PATH

    利用 T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符

    SELECT ',' + au.UserCode FROM dbo.AcceptanceUser au  FOR XML PATH ('')
    SELECT  STUFF((SELECT ',' + au.UserCode FROM dbo.AcceptanceUser au  FOR XML PATH ('')), 1, 1, '')

    https://blog.csdn.net/rav009/article/details/50723307

    DATE

    select GETDATE()
    select STR(YEAR(GETDATE()))
    select RTRIM(STR(YEAR(GETDATE())))
    select LTRIM(RTRIM(STR(YEAR(GETDATE()))))
    DECLARE @now DATETIME 
    SELECT  @now = GETDATE() 
    SELECT    DATEPART(YEAR, @now)
    SELECT    DATEPART(MONTH, @now)
    SELECT    DATEPART(DAY, @now)

    CONVERT

      data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

    CONVERT(data_type(length),data_to_be_converted,style)SELECT    
    CONVERT(VARCHAR(19),GETDATE())
    CONVERT(NVARCHAR(12),GETDATE() ,112)
    CONVERT(VARCHAR(10),GETDATE(),110) 
    CONVERT(VARCHAR(11),GETDATE(),106)
    CONVERT(VARCHAR(24),GETDATE(),113)
    select @@rowcount;

     DATEDIFF() 函数返回两个日期之间的时间。

    DATEDIFF(datepart,startdate,enddate)
    SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

    DATEADD() 函数在日期中添加或减去指定的时间间隔。

    select DATEADD(mm,2,'2014-12-30')    结果:2015-02-28 

    ISNULL

    STUFF

    RTRIM

    REPLACE

    FOR XML PATH('')

    SELECT STUFF('abcdef', 2, 3, 'ijklmn');

      SELECT  ISNULL(STUFF(( SELECT   DISTINCT  ',' + RTRIM(AreaName) FROM  [Sign2019].[dbo].[AreaInfo] WHERE Level=1 FOR XML PATH('')), 1, 1, ''), '')

    以下示例从第一个字符串 abcdef 的第 2 个位置 (b) 开始删除三个字符,然后在删除位置插入第二个字符串,从而创建并返回一个字符串。

    aijklmnef

    SUBSTRING ( expression, start, length ) 

     dense_rank()

    SELECT   dense_rank() OVER (ORDER BY score DESC) AS Rank,score FROM [SCST].[dbo].[Sc]

     WITH (NOLOCK)

     除了简单的SELECT之外,有JOIN的SELECT语法也是可以使用的。但是DELETE、INSERT、UPDATE这些需要transaction的指令就不行了

    https://www.cnblogs.com/kerrycode/p/3946268.html

    SCOPE_IDENTITY()和@@IDENTITY

      返回上面操作最后一个数据表的最后row的IDENTITY 列的值;

      建议大家慎用 @@IDENTITY,而尽量采用 SCOPE_IDENTITY() 函数替换之。SCOPE_IDENTITY() 也是得到最后一条自增域的值,但是它是仅限在一个操作范围之内,而不像 @@IDENTITY 是取全局操作的最后一步操作所产生的自增域的值的。

    isnull()函数:

             isnull(value1,value2)

            1、value1与value2的数据类型必须一致。

            2、如果value1的值不为null,结果返回value1。

            3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。

     Replace

    RowNumber

    Convert

    DISTINCT

    if...eles

    IF(条件表达式)
      BEGIN --相当于C#里的{
        语句1
      ……
      END --相当于C#里的}
    ELSE
     BEGIN
        语句1
        ……
      END

    declare

    DECLARE @sql VARCHAR(8000)
    DECLARE @start_row_num AS INT

    case

    select SName,Sage=(
        case Sage
            when 17 then ''
            when 18 then '正好'
            when 19 then ''
        end
    )    
    from [SCST].[dbo].[Student]

    select和SET的区别

    CAST 和 CONVERT

    SELECT CAST(SYSDATETIME() AS DATE);
    SELECT CONVERT(CHAR(8),CURRENT_TIMESTAMP,112);
    SELECT CAST(CONVERT(VARCHAR(12), getdate(), 111) AS DATE)

    需要注意的是,CAST是ANSI标准的SQL,而CONVERT不是。所以,除非需要使用样式值,否则推荐优先使用CAST函数,以保证代码尽可能与标准兼容

    CROSS APPLY

    SQL中PIVOT 行列转换

      https://www.cnblogs.com/zouhao/p/6050809.html

    透视转换技术

      https://www.cnblogs.com/yuanzijian-ruiec/p/9457366.html

    SET NOCOUNT的作用

    SELECT DB_NAME()

    四舍五入

    select ROUND(32.678,2) --32.700
    select CAST(32.678 as DECIMAL(18,2)) --32.7
    select convert(NUMERIC(18,2),32.678) --32.7

    资料

    https://www.cnblogs.com/lqLove/p/5803717.html

    https://www.cnblogs.com/rdst/p/4727063.html

    https://blog.csdn.net/smartsmile2012/article/details/73286087

  • 相关阅读:
    windows mobile licence
    通过acme.sh生成泛域名证书
    枚举值为何为1、2、4、8、16....
    script 解决 跨域访问
    强大的json字符串对象,转化为object对象
    使用maven jetty调试web程序
    web上实现起点到终点的抛物线轨迹运动——补充
    实现2个有序数组的排序
    maven axis2简单部署webservice
    使用javamail发送邮件
  • 原文地址:https://www.cnblogs.com/cnki/p/9526514.html
Copyright © 2011-2022 走看看