随笔分类 - User-Defined Functions
摘要:以前曾写了一个流水号的实现功能,它是在SQL中处理的。可以参考:http://www.cnblogs.com/insus/articles/1702583.html这段时间开发,又涉及到使用流水号功能。不同的条件,使用二种前缀。后面的流水号还是要流水的功能,要求再加上位数已经有所变化了。为了解决此问题,只有添加另外一个自定义函数在sql中。改写如下,可参考:udf_SeriesNumber SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOCREATEFUNCTION[dbo].[udf_SeriesNumber](@NumberNVARCHAR(12),--原
阅读全文
摘要:为了实现报表,写了一个日期选择功能。可以参考下图:下面内容是在2011年8月21日更新添加的:实现这个功能,需要在数据库准备星期与月份的数据:星期函数:http://www.cnblogs.com/insus/articles/1622988.html月份函数:http://www.cnblogs.com/insus/articles/1535448.html准备好数据源之后,当然是写存储过程了,Insus.NET会以星期与月份分开写出来,首先是星期:usp_Week_GetByDate SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOALTERPROCEDU
阅读全文
摘要:一般情况之下,存储日期至数据库中,不必在意它的显示格式,只要是日期即可,在程序中显法时,才会去控制它的显示格式。但是,当你是开发SQL程序,你要求不了前台程序员按照你的想法去做,把日期显示某种格式,他们只管调用你的存储过程。解决这样的问题,我们把SQL输出结果就控制为最终结果,有关这方面企业内网程式应用较多。你可以参考下面SQL自定义函数,需要的地方调用即可。View Code CREATEFUNCTION[dbo].[ConvertDate](@InputDateDATETIME,--输入日期,或是原格式日期@DateFormatNVARCHAR(10)--日期显示格式)RETURNSNVA
阅读全文
摘要:T-SQL使用扩展存储过程[master].[dbo].[xp_regread]读取注册表信息。如下注册表:Insus.NET为了做演示,写了一个用户自定义函数[dbo].[GetServerLocation]():View Code CREATEFUNCTION[dbo].[GetServerLocation]()RETURNSNVARCHAR(4000)ASBEGINDECLARE@LocationNVARCHAR(4000)EXEC[master].[dbo].[xp_regread]'HKEY_CURRENT_USER','ControlPanel\Intern
阅读全文
摘要:在MS SQL中处理用户输入的数值是否为Integer,为了简化程序代码,可以使用下面函数。IsIntegerCREATEFUNCTION[dbo].[IsInteger](@ValueNVARCHAR(4000))RETURNSNVARCHAR(4000)ASBEGINDECLARE@ResultValueBIT= 1--如果ISNULL把值设为N''SET@Value=ISNULL(LTRIM(@Value),N'')--处理前导N'-'字符串,如果有,把它移除,这样才好做以下的判断。SET@Value=CASEWHENSUBSTRING(@
阅读全文
摘要:在SQL开发中,处理双引号(DoubleQuote),为了方便与简化代码,只有创建一个函数,在需要的方调用即可:DoubleQuoteCREATEFUNCTION[dbo].[DoubleQuote](@ValueNVARCHAR(4000))RETURNSNVARCHAR(4000)ASBEGINRETURNREPLACE(@Value,'''','''''')END
阅读全文
摘要:MS SQL两个日期比较,获取最大或最小的日期的函数。如果你可以使用SQL 日期比较函数http://www.cnblogs.com/insus/archive/2011/06/24/2089005.html去实现。获取最大的日期函数:MaximumDate CREATEFUNCTION[dbo].[MaximumDate](@DT1DATETIME,@DT2DATETIME)RETURNSDATETIMEASBEGINRETURNCASE--有关DateTimeCompare可参考:http://www.cnblogs.com/insus/archive/2011/06/24/2089005
阅读全文
摘要:开发SQL过程中,会常常需要去比较两个日期大小。因此Insus.NET写了一个日期比较的函数,方便开发时的使用。DateTimeCompare CREATEFUNCTIONDateTimeCompare(@DT1DATETIME,@DT2DATETIME)RETURNSINTASBEGINRETURNCASEWHEN@DT1>@DT2THEN1WHEN@DT2>@DT1THEN-1ELSE0ENDEND此函数的两个参数DT1和DT2的数据类型为DATETIME,返回值INT,为指示DT1和DT2 的相对值。值类型条件小于零DT1 小于 DT2。零DT1 等于 DT2。大于零DT1
阅读全文
摘要:开发ERP时,会使用到下面两个获取最大值或最小值日期的函数。最大日期值:MaximumDateValueCREATEFUNCTION[dbo].[MaximumDateValue]()RETURNSDATETIMEASBEGINRETURNCONVERT(DATETIME,'9999-12-3123:59:59.998',121)END最小日期值:MinimumDateValueCREATEFUNCTION[dbo].[MinimumDateValue]()RETURNSDATETIMEASBEGINRETURNCONVERT(DATETIME,'1753-01-01&
阅读全文
摘要:用户需要传入年份,获取该年份2月份的天数。可以写成一个用户自定义函数。View Code CREATEFUNCTION[dbo].[DaysOfFebruary](@YearINT)RETURNSINTASBEGINRETURNCASEWHEN(@Year%4=0AND@Year%100<>0)OR(@Year%400=0)THEN29ELSE28ENDEND代码演示:SELECT[dbo].[DaysOfFebruary](2011)执行结果:
阅读全文
摘要:SQL开发过程中,经常开发存储过程,与自定义函数,它们有什么区别呢?下表是存储过程(PROCEDURE)与自定义函数(User-Defined Function)的区别,参考: 存储过程自定义函数返回一个或多值必须返回标量或一个表参数有输入输出仅有输入被谁调用EXECUTESQL语句是否可用TRY-CATCH是否相互调用是否事务是否
阅读全文
摘要:参考此帖:http://topic.csdn.net/u/20110416/13/1878ce94-6154-43a3-9b23-f5ff8c06f164.html如果您无法打开此链接,也可以下载此论题图http://download.cnblogs.com/insus/Miscellaneous/Insus_Birthdate_Cal_Age.rar。根据出生日期计算出在某个事件日期当时的年龄。因为Insus.NET把它写成一个自定义函数UDF_Age:View Code SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGOIFOBJECT_ID('[d
阅读全文
摘要:前一段时间,有网友问及中文日期的问题http://www.cnblogs.com/insus/articles/2012048.html,原来最终要求是需要在SQL中处理。刚才整理了一下。把它写成一个SQL函数,需要时调用即可,下面为函数代码,仅供参考:View Code CREATEFUNCTION[dbo].[udf_ConvertToChineseDate](@DateDATETIME)RETURNSNVARCHAR(20)ASBEGIN--定义一个表变量DECLARE@DigitalTABLE([D1][TINYINT]NOTNULL,[D2][nvarchar](2)NOTNULL,
阅读全文
摘要:参考:http://topic.csdn.net/u/20110305/17/885967de-1af4-4fb0-af95-b9a3f408a788.html?73823对于这个非标准要求,也许日后维护与扩展会带来更多困难。如果一定要求这样,Insus.NET的做法,只好写一个函数,整个专案中,需要地方,调用这个自定义函数即可。View Code CREATEFUNCTION[dbo].[udf_GetMyDate](@DateDATETIME)RETURNSNVARCHAR(30)ASBEGINIF@DateISNULLSET@Date=CURRENT_TIMESTAMP;DECLARE@
阅读全文
摘要:把下面这个例子http://www.cnblogs.com/insus/articles/1962609.html,改用传入参数。参考:DECLARE@sexINT=2;--1:femal;2:maleWITHMaleEmpAS(SELECT*FROM[Employee]WHERE[SexId]=@sex)SELECT*FROMMaleEmp;
阅读全文
摘要:雇员表出勤表中,只有一个字段为上班总工时,需要计算出正常上班工时,缺勤工时和加班工时。代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEFUNCTION[dbo].[udf_WorkingHours]()RETURNS@WorkingHoursTABLE([WorkTicketId]INT,[OperatorDate]DATETIME,[NormalWorkTime]DECIMAL(18,6),[AbsentationTime]
阅读全文
摘要:公式: 设备直接利用率 * 人机表现性* 质量水平代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEFUNCTION[dbo].[udf_Oee](@MachineExploitationDECIMAL(18,6),@PersonMachineExpressiveDECIMAL(18,6),@QualityLevelDECIMAL(18,6))RETURNSDECIMAL(18,6)ASBEGINDECLARE@ReturnVa
阅读全文
摘要:公式: (1 - 停机时间 / 机器实际上班时间)* 100%代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEFUNCTION[dbo].[udf_MachineExploitation](@MachineHaltTimeDECIMAL(18,6),@WorkTimeDECIMAL(18,6))RETURNSDECIMAL(18,6)ASBEGINDECLARE@ReturnValueDECIMAL(18,6)SET@Retu
阅读全文
摘要:公式: 产出数 / (产出数 + 不良品数)代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEFUNCTION[dbo].[udf_QualityLevel](@OutputQuantityDECIMAL(18,6),@DefectQuantityDECIMAL(18,6))RETURNSDECIMAL(18,6)ASBEGINDECLARE@ReturnValueDECIMAL(18,6)--计算总产出DECLARE@Gros
阅读全文
摘要:公式: 人员表现性 * 机器表现性代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->CREATEFUNCTION[dbo].[udf_PersonMachineExpressive](@PersonExpressiveDECIMAL(18,6),@MachineExpressiveDECIMAL(18,6))RETURNSDECIMAL(18,6)ASBEGINDECLARE@ReturnValueDECIMAL(18,6)SELECT@R
阅读全文