1

这更像是专家的帮助而不是问题。我需要声明一个名为 BillingYear 的变量,我可以将它分配给一年。问题是:

我不知道它应该是哪种数据类型!我知道这很简单,但是......问题是,在我们的数据库中,我们没有年份列。我们有一个叫做财政年度的东西,从 07/01/任何一年开始 - 到 06/30/明年结束

我想找到一种输入年份的方法,该年份将添加到财政开始、财政结束变量中,它们是日期时间变量。我试过这个,但它不工作!

DECLARE
@Year int, --Here I thought I can assign year to any year then do the following:

DECLARE
@fiscalstart datetime = '07/01/' + @Year,
@fiscalend datetime = '06/30/' + @Year+1

然后我可以用它来计算 billingMonth by billingMonth = fn_Fiscal(@fiscalstart, @fiscalend )// 你真的不需要知道这部分,但我只是想告诉你为什么我需要做所有这些复杂的步骤。解决这个问题的最佳方法是什么?

4

4 回答 4

2

这里有几个问题,首先您需要确保您尝试转换为日期时间的字符串格式正确。然后你需要将你的年份变量转换为一个字符串,否则你会得到类型不匹配。这里有些例子。

DECLARE @year INT
SET @year = 2012

DECLARE @debugDate1 DATETIME
SET @debugDate1 = '07/01/' + CAST(@year AS VARCHAR(MAX)) + ' 00:00:00'
SELECT @debugDate1

DECLARE @debugDate2 DATE
SET @debugDate2 = '07/01/' + CAST(@year AS VARCHAR(MAX))
SELECT @debugDate2
于 2013-07-11T17:19:39.767 回答
1

@fiscalstart 和 @fiscalend 被定义为日期时间,因此您将它们设置为的对象必须是日期时间。

您正在使用字符串 '07/01/' 并尝试向其中添加一个整数。这行不通。

您需要执行以下操作:

SET @fiscalstart = '07/01/' + CAST(@Year as VARCHAR)
于 2013-07-11T17:14:45.640 回答
1

如果你使用的是 Sql Server 2012,你可以使用这个(在这里测试):

SELECT DATEFROMPARTS (2010, '07', '01' ) AS Result;

有关更多信息,请参阅此链接

DATEFROMPARTS (year, month, day)
DATEFROMPARTS 返回一个日期值,其中日期部分设置为指定的年、月和日,时间部分设置为默认值。如果参数无效,则会引发错误。如果所需参数为 null,则返回 null。

于 2013-07-11T17:15:18.480 回答
1

不要将 int 添加到字符串中,最好使用与 DMY 顺序无关的格式,例如yyyymmdd;

DECLARE @Year int = 2013
DECLARE @fiscalstart datetime = cast(@Year as varchar(4)) + '0701'
于 2013-07-11T17:15:24.780 回答