SQL测试用户定义的函数

SQL测试用户定义的函数,sql,sql-server,function,ssms,Sql,Sql Server,Function,Ssms,我有以下代码。我试图通过传入@Hire_Date Datetime来测试该函数,并查看将返回什么值。然而,我对SQL server 2012还不熟悉,不知道该如何执行此操作 谢谢 CREATE FUNCTION dbo.getYearsOfService (@Hire_Date Datetime) RETURNS int AS BEGIN DECLARE @thisYear int DECLARE @thisMonth int DECLARE @hireYear in

我有以下代码。我试图通过传入@Hire_Date Datetime来测试该函数,并查看将返回什么值。然而,我对SQL server 2012还不熟悉,不知道该如何执行此操作

谢谢

CREATE FUNCTION dbo.getYearsOfService (@Hire_Date Datetime) 
RETURNS int
AS BEGIN

    DECLARE @thisYear int
    DECLARE @thisMonth int
    DECLARE @hireYear int
    DECLARE @hireMonth int
    DECLARE @yearlengthOfService int
    DECLARE @monthlengthOfService int

    SET @thisYear = YEAR(getdate())
    SET @thisMonth = MONTH(getdate())
    SET @hireYear = YEAR('@Hire_Date')
    SET @hireMonth = MONTH('@Hire_Date')

    SET @yearlengthOfService = (@thisYear - @hireYear);
    SET @monthlengthOfService = (@thisMonth - @hireMonth);  

    IF (@monthlengthOfService < 0)  
        SET @yearlengthOfService = (@yearlengthOfService - 1);

    RETURN @yearlengthOfService
END;
创建函数dbo.getYearsOfService(@Hire\u Date Datetime)
返回整数
作为开始
声明@thisYear int
声明@thisMonth int
声明@hireYear int
声明@hireMonth int
声明@yearlengthOfService int
声明@monthlengthOfService int
设置@thisYear=YEAR(getdate())
设置@thisMonth=MONTH(getdate())
设置@hireYear=YEAR(“@Hire\u Date”)
设置@hireMonth=MONTH(“@Hire\u Date”)
设置@yearlengthOfService=(@thisYear-@hireYear);
设置@monthlengthOfService=(@thisMonth-@hireMonth);
如果(@monthlengthOfService<0)
设置@yearlengthOfService=(@yearlengthOfService-1);
RETURN@yearlengthOfService
结束;

您可以使用
选择

SELECT dbo.getYearsOfService(GETDATE())

(也许是美国下一任总统的聘用日期。)

如果有日期表,也可以使用表中的值:

SELECT dbo.getYearsOfService(datecol)
FROM t;

您只需使用
选择

SELECT dbo.getYearsOfService(GETDATE())

(也许是美国下一任总统的聘用日期。)

如果有日期表,也可以使用表中的值:

SELECT dbo.getYearsOfService(datecol)
FROM t;

您只需按如下方式查询函数:

SELECT dbo.getYearsOfService ('02/25/2017')
;
SELECT dbo.getYearsOfService(<ColumnName>)
FROM <TableName>
WHERE <SomeColumn> = <SomeValue>
;
SELECT <Column1>, <Column2>, <Column3>, dbo.getYearsOfService(<ColumnName>) AS <WhateverNameYouWant>
FROM <TableName>
WHERE <SomeColumn> = <SomeValue> -- Optional WHERE Clause
;
或者,如果要对表中的记录使用该函数,可以根据该行中的值进行查询,如下所示:

SELECT dbo.getYearsOfService ('02/25/2017')
;
SELECT dbo.getYearsOfService(<ColumnName>)
FROM <TableName>
WHERE <SomeColumn> = <SomeValue>
;
SELECT <Column1>, <Column2>, <Column3>, dbo.getYearsOfService(<ColumnName>) AS <WhateverNameYouWant>
FROM <TableName>
WHERE <SomeColumn> = <SomeValue> -- Optional WHERE Clause
;
您不想在这里传递字符串,但要传递参数值。去掉省略号,你应该得到一个干净的运行没有错误

SET @hireYear = YEAR(@Hire_Date)
SET @hireMonth = MONTH(@Hire_Date)

您只需按如下方式查询函数:

SELECT dbo.getYearsOfService ('02/25/2017')
;
SELECT dbo.getYearsOfService(<ColumnName>)
FROM <TableName>
WHERE <SomeColumn> = <SomeValue>
;
SELECT <Column1>, <Column2>, <Column3>, dbo.getYearsOfService(<ColumnName>) AS <WhateverNameYouWant>
FROM <TableName>
WHERE <SomeColumn> = <SomeValue> -- Optional WHERE Clause
;
或者,如果要对表中的记录使用该函数,可以根据该行中的值进行查询,如下所示:

SELECT dbo.getYearsOfService ('02/25/2017')
;
SELECT dbo.getYearsOfService(<ColumnName>)
FROM <TableName>
WHERE <SomeColumn> = <SomeValue>
;
SELECT <Column1>, <Column2>, <Column3>, dbo.getYearsOfService(<ColumnName>) AS <WhateverNameYouWant>
FROM <TableName>
WHERE <SomeColumn> = <SomeValue> -- Optional WHERE Clause
;
您不想在这里传递字符串,但要传递参数值。去掉省略号,你应该得到一个干净的运行没有错误

SET @hireYear = YEAR(@Hire_Date)
SET @hireMonth = MONTH(@Hire_Date)

您知道SQLServer包含自己的函数来查找两个日期之间的差异吗?您知道SQLServer包含自己的函数来查找两个日期之间的差异吗?您好,尝试此操作时出现错误:从字符串转换日期和/或时间时转换失败。@RajanKerai。此答案中的前两个查询不可能出现此错误。您好,尝试此操作时,我得到一个错误:从字符串转换日期和/或时间时,转换失败。@RajanKerai。此答案中的前两个查询不可能出现此错误。您好,尝试此操作时,我收到错误:从字符串转换日期和/或时间时,转换失败。可能是因为数据库的默认日期格式不同。尝试将日期格式从月/日/年反转为日/月/年,因此为'25/02/2017'。如果您在尝试针对某个列的值运行时遇到该错误,那么显然该列包含的值的格式不正确,无法传递给函数。您能告诉我您试图传递给函数的值是什么吗?我试图传递值('02/25/2017'),但是此函数是一个更大程序的一部分,我需要检查列中的日期以查找其他表。该列中的日期格式为:“2003-06-2817:11:25.000”。我尝试了您编写的两个函数-手动输入日期并对照表中的记录输入日期,但得到了相同的错误。正在更新我的答案。错误不是来自传递到函数中的日期,而是来自函数本身语法中的错误。请参阅更新答案以获取解释
YEAR(“@HireDate”)
抛出错误,因为字符串“@HireDate”不是日期(即,无法转换为从中提取
YEAR()
,因此出现错误)Hi,尝试此操作时,我得到错误:从字符串转换日期和/或时间时,转换失败。可能是因为数据库的默认日期格式不同。尝试将日期格式从月/日/年反转为日/月/年,因此为'25/02/2017'。如果您在尝试针对某个列的值运行时遇到该错误,那么显然该列包含的值的格式不正确,无法传递给函数。您能告诉我您试图传递给函数的值是什么吗?我试图传递值('02/25/2017'),但是此函数是一个更大程序的一部分,我需要检查列中的日期以查找其他表。该列中的日期格式为:“2003-06-2817:11:25.000”。我尝试了您编写的两个函数-手动输入日期并对照表中的记录输入日期,但得到了相同的错误。正在更新我的答案。错误不是来自传递到函数中的日期,而是来自函数本身语法中的错误。请参阅更新答案以获取解释
YEAR(“@HireDate”)
抛出错误,因为字符串“@HireDate”不是日期(即,无法转换为从中提取
YEAR()的日期,因此出错)