1。将指定的字符拆分成列表功能:主要适用于数据库字段存储字段以逗号等分隔符存储,可以转换成列表再与子查询一起使用。--StringspecifyingcharactersplitintolistCREATEFUNCTION[dbo].[splitl](@StringVARCHAR(MAX),@DelimiterVARCHAR(MAX))返回@temptableTABLE(itemsVARCHAR(MAX))ASBEGINDECLARE@idxINT=1DECLARE@sliceVARCHAR(MAX)IFLEN(@String)<1ORLEN(ISNULL(@String,''))=0RETURNWHILE@idx!=0BEGINSET@idx=CHARINDEX(@Delimiter,@String)IF@idx!=0SET@slice=LEFT(@String,@idx-1)ELSESET@slice=@StringIFLEN(@slice)>0插入@temptable(items)VALUES(@slice)SET@String=RIGHT(@String,LEN(@String)-@idx)IFLEN(@String)=0BREAKENDRETURNENDGO--调用方法SELECT*FROMdbo.splitl('aaa|bbb|ccc','|')2。去除号码末尾功能:适用的号码字段需要去除尾随零。--去掉numberCREATE函数末尾的0[dbo].[ClearZero](@inValuevarchar(50))returnsvarchar(50)asbegindeclare@returnValuevarchar(20)if(@inValue='')set@returnValue=''--Emptyifemptyelseif(charindex('.',@inValue)='0')set@returnValue=@inValue--elseifwithoutdecimalpoint(substring(reverse(@inValue),patindex('%[^0]%',reverse(@inValue)),1)='.')set@returnValue=left(@inValue,len(@inValue)-patindex('%[^0]%',reverse(@inValue)))--elseset@returnValue=left(@inValue,len(@inValue)-patindex('%[^0]%.%',reverse(@inValue))+为小数点后的所有零1)--在任何其他情况下return@returnValueend--CalltheexampleSELECTdbo.ClearZero(258.250300)3.创建表、视图、函数和存储过程来判断它们是否存在功能:执行脚本来判断它们是否存在,这样就可以一次执行多个脚本。/*判断函数/方法是否存在,存在则删除函数/方法*/IFEXISTS(SELECT*FROMdbo.sysobjectsWHEREname='Func_Name')DROPFUNCTIONFunc_Name;GO--创建函数/方法CREATEFUNCTIONFunc_Name(@aINT)RETURNINTASBEGIN--codingENDGO/*判断存储过程是否存在,如果存在则删除存储过程*/IFEXISTS(OBJECT_NAME('Proc_Name','P')ISNOTNULLDROPPROCProc_Name;GO--创建存储过程CREATEPROCProc_NameASSELECT*FROMTable_NameGO/*判断数据表是否存在,存在则删除数据表*/IFEXISTS(SELECT*FROMdbo.sysobjectsWHEREname='Table_Name')DROPVIEWTable_Name;GO--创建数据表CREATETABLETable_Name(IdINTPRIMARYKEYNOTNULL)/*判断视图是否存在,存在则删除视图*/IFEXISTS(SELECT*FROMsys.viewsWHEREname='View_Name')DROPVIEWView_NameGO--CreateviewCREATEVIEWView_NameASSELECTSELECT*FROMtable_nameGO4.金额转大写功能:适用于发票打印、财务单据等部分场景,金额需要转换为大写。/*描述:将数字量转换为中文量例:187.4转换为100、807、4角*/CREATEFUNCTION[dbo].[CNumeric](@numnumeric(14,2))returnsnvarchar(100)BEGIN声明@n_datanvarchar(20),@c_datanvarchar(100),@n_strnvarchar(10),@iintSet@n_data=right(space(14)+cast(cast(abs(@num*100)asbigint)asnvarchar(20)),14)Set@c_data=''Set@i=1WHILE@i<=14Beginset@n_str=substring(@n_data,@i,1)if@n_str<>''beginIF不是((SUBSTRING(@n_data,@i,2)='00')或((@n_str='0')和((@i=4)或(@i=8)或(@i=12)或(@i=14))))SET@c_data=@c_data+SUBSTRING(N'0123456789',CAST(@n_strASint)+1,1)IFnot((@n_str='0')and(@i<>4)and(@i<>8)and(@i<>12))SET@c_data=@c_data+SUBSTRING(N'thousands数千个圆角',@i,1)IFSUBSTRING(@c_data,LEN(@c_data)-1,2)=N'亿亿'SET@c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)ENDSET@i=@i+1ENDIF@num<0SET@c_data='(负数)'+@c_dataIF@num=0SET@c_data='零圆'IF@n_str='0'SET@c_data=@c_data+'整个'RETURN(@c_data)END
