当前位置: 代码迷 >> 综合 >> CHARINDEX()、CAST()、LEFT()、STUFF()应用笔记
  详细解决方案

CHARINDEX()、CAST()、LEFT()、STUFF()应用笔记

热度:18   发布时间:2023-12-21 08:28:38.0

在项目中多用存储过程可减少传输流量,也可防止库里的表结构遭到泄露等(好处多多),平时很少写存储过程,今天改个东西发现生疏多了,暂且记成笔记吧!

参数@ids="1,2,3,4,"@gid="1"执行后表里结果

ALTER PROCEDURE 存储过程NAME
@gid smallint,
@ids varchar(500)
AS
BEGINSET NOCOUNT ON;declare @id smallintBegin TransAction B2delete from GA(表) where GroupsID=@gidWHILE CHARINDEX(',',@ids)>0BEGINset @id=CAST(LEFT(@ids,CHARINDEX(',',@ids)-1) as smallint)insert into GA(ID,AID) values(@gid,@id)IF @@ROWCOUNT=0BEGINRollBack TransAction B2return 2ENDset @ids=STUFF(@ids,1,CHARINDEX(',',@ids),'')ENDCommit TransAction B2return 1
END

  1. 当SET NOCOUNT为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。
  2. CHARINDEX CHARINDEX ( expression1 , expression2 [ , start_location ] )

    Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。

    SQL CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如SQL CHARINDEX函数没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:

    CHARINDEX('SQL', 'Microsoft SQL Server')

    这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。

    接下来,我们看这个CHARINDEX命令:

    CHARINDEX('7.0', 'Microsoft SQL Server 2000')

    在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。
  3. cast
    将某种数据类型的表达式显式转换为另一种数据类型。
    语法:
    CAST ( expression AS data_type )
    CAST(ytd_sales AS char(20))
    把字符串
    '20091014191338'
    转换成时间的时候:
    
    select  cast(stuff(stuff(stuff('20091014191338',9,0,' ' ),12,0,':'),15,0,':') as datetime)
  4. LEFT
    取一个字符串的前若干位
    select left('abcdefg', 3)
    输出: abc
  5. STUFF (有填充物的意思)看参数就知道它的作用了stuff(A,B,C,D)A:原字符串:其中的某一部分将被替换。B:开始替换的位置:指定从原字符串的第几个字符开始替换。C:被替换的字符数:指定从开始处连续有几个字符要被替换掉(如果此数为0,那么“用于替换的字符串”将插入到开始处)。D:用于替换的字符串:该字符串将代替被替换掉的字符串放到原字符串当中。(如果此为空字符串,被替换的字符将被删除。)



  相关解决方案