这更像是专家的帮助,而不是问题。我需要声明一个名为BillingYear的变量,我可以将它分配给一年。问题是:
我不知道它应该是哪种数据类型!我知道这很简单,但问题是,在我们的数据库中,我们没有年份专栏。我们有一个叫财政年度的东西,从07/01 /任何一年开始 - 到06/30 / nextyear结束
我想找到一种方式,我输入一年,年份将被添加到财政开始,fiscalend变量,它们是日期时间变量。我试过了,但它没有用!
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,通过billingMonth = fn_Fiscal(@fiscalstart,@ fiscalend)//你真的不需要知道这个部分,但我只想告诉你为什么我需要做所有这些复杂的步骤。 解决这个问题的最佳方法是什么?
答案 0 :(得分:2)
首先,您需要确保将尝试投射到日期时间的字符串放在正确的format中。然后你需要将年变量转换为字符串,否则你会得到类型不匹配。以下是一些例子。
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
答案 1 :(得分:1)
@fiscalstart和@fiscalend被定义为日期时间,因此您设置它们的对象必须是日期时间。
你正在取一个字符串'07 / 01 /'并试图为它添加一个整数。这不起作用。
你需要做类似的事情:
SET @fiscalstart = '07/01/' + CAST(@Year as VARCHAR)
答案 2 :(得分:1)
如果您使用的是Sql Server 2012,则可以使用它(测试 here ):
SELECT DATEFROMPARTS (2010, '07', '01' ) AS Result;
有关详细信息,请参阅 link 。
DATEFROMPARTS(年,月,日)
DATEFROMPARTS返回日期值,日期部分设置为指定的年,月和日,时间部分设置为默认值。如果参数无效,则会引发错误。如果必需参数为null,则返回null。
答案 3 :(得分:1)
不要在字符串中添加int,最好使用DMY订单不可知格式,例如yyyymmdd
;
DECLARE @Year int = 2013
DECLARE @fiscalstart datetime = cast(@Year as varchar(4)) + '0701'