zoukankan      html  css  js  c++  java
  • SQL自定义函数

    From:http://www.cnblogs.com/for917157ever/archive/2012/12/03/2800591.html

    自定义函数分为二种,一种是标量值函数,另一种是表格值函数

    1 标量值函数 :返回一个标量值

    语法:

    Create function 函数名(参数)

    Returns 返回值数据类型

    as

    begin

    SQL语句(必须有return 变量或值)

    End

    如示例:

    CREATE  FUNCTION MySTR(@strs VARCHAR(50))
    RETURNS VARCHAR(50) 
    AS
    BEGIN
     DECLARE @str2 VARCHAR(30)
     SET @str2=@strs
     RETURN @str2
    END
     --执行函数
    SELECT dbo.MySTR('aa') AS result
    
    在sql 语句也可以这样用:
    DECLARE @str3 VARCHAR(30)
     SET @str3=(select name from userinfo where huji=dbo.MySTR('邯郸') and id=23 )
    select @str3

    2 表格值函数 ,表格值函数有二种(内联表格值函数,多句表格值函数)‘

    a 内联表格值函数

    语法:

    create function 函数名(参数)

    returns table

    as

    return(一条SQL语句)

    示例:

    CREATE  FUNCTION   tabcmess(@title VARCHAR(10))
    
    RETURNS  TABLE 
    
    AS 
    
    return(select title,des from product where title like '%'+@title+'%')
    
    --执行
    
    SELECT * FROM tabcmess('aaa')

    b、 多句表格值函数

       create function 函数名(参数)

       returns 表格变量名table (表格变量定义)

    as

       begin

        SQL语句

       end

     示例:

    CREATE   function tabcmessalot (@title varchar(10))
    
    Returns @ctable table(title varchar(10) null,des varchar(100) null)
    
    As
    
    Begin
    
    Insert @ctable Select title,des from product WHERE title LIKE '%'+@title+'%'
    
    return
    
    End
    
    --执行
    
    SELECT * FROM tabcmessalot('aaa')

    拆分函数

    USE [XSMAN_DB]
    GO
    /****** Object:  UserDefinedFunction [dbo].[func_SplitToTable]    Script Date: 12/03/2012 23:25:37 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================  
    -- Author:  cxy  
    -- Create date: 2010-10-28  
    -- Description: 根据分隔符分割字符串,返回表  
    -- =============================================  
    Create FUNCTION [dbo].[func_SplitToTable]  
    (  
     @SplitString nvarchar(max),  
     @Separator nvarchar(10)=' '  
    )  
    RETURNS @SplitStringsTable TABLE  
    (  
     [id] int identity(1,1),  
     [value] nvarchar(max)  
    )  
    AS  
    BEGIN  
     DECLARE @CurrentIndex int;  
     DECLARE @NextIndex int;  
     DECLARE @ReturnText nvarchar(max);  
     SELECT @CurrentIndex=1;  
     WHILE(@CurrentIndex<=len(@SplitString))  
     BEGIN  
      SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);  
      IF(@NextIndex=0 OR @NextIndex IS NULL)  
       SELECT @NextIndex=len(@SplitString)+1;  
      SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);  
      INSERT INTO @SplitStringsTable([value]) VALUES(@ReturnText);  
      SELECT @CurrentIndex=@NextIndex+1;  
     END  
     RETURN  
    END
    
    --执行函数 1
    select * from dbo.func_SplitToTable('1,2',',')
    
    --执行函数 2
    select * from dbo.func_SplitToTable('1-2-3','-')
    
    --执行函数 3
    select * from dbo.func_SplitToTable('1 2 3',' ')

    sql中实现split()功能参考:http://www.cnblogs.com/chengxiaohui/articles/2261243.html

    获取Max行号:SELECT ISNULL(MAX(CAST(ISNULL(IIF(Number = '', NULL, Number ), 0) AS INT)), 0)+1 AS nummber FROM table

  • 相关阅读:
    二进制求和
    删除排序数组中的重复项--leetcode算法题
    vue render
    数字实现千分位分隔符
    用nodejs实现向文件的固定位置插入内容
    工作中用到的正则表达式
    组件toast(类似于element-ui的message组件)的实现
    用svg实现一个环形进度条
    批量删除当前文件夹下面的.svn文件夹
    windows下的包管理器scoop
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/6687342.html
Copyright © 2011-2022 走看看