我有以下代码。我试图通过传入@Hire_Date日期时间并查看将返回的值来测试该函数但是我是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;
答案 0 :(得分:2)
您可以使用SELECT
:
SELECT dbo.getYearsOfService(GETDATE())
或
SELECT dbo.getYearsOfService(CAST('2021-01-20' as DATETIME))
(也许是下一任美国总统的雇用日期)
如果你有一个日期表,你也可以使用表中的值:
SELECT dbo.getYearsOfService(datecol)
FROM t;
答案 1 :(得分:0)
你只需要查询这个函数:
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')
您不想在此处传递字符串,而是参数值。撇开撇号,你应该得到一个没有错误的干净运行。
SET @hireYear = YEAR(@Hire_Date)
SET @hireMonth = MONTH(@Hire_Date)