2013-01-31 135 views
1

首先是满足,我很新的使用SQL查询,所以我很抱歉,如果我听起来无知......设置默认值IF条件SQL 2008

我有一个已经存储在数据库工作每小时下降并创建一张表。该表看起来是这样,但有数据为每小时1至24

Name   Hour1 Hour24 
Point 1 OUT 4  5 
Point 1 IN 26  22 
Point 2 OUT 46  44  
Point 2 IN 0  0 
Point 3 OUT 18  19 
Point 3 IN 56  51 
Point 4 OUT 111 100 
Point 4 IN 0  0 
Point 5 OUT 0  0 
Point 5 IN 42  46 
Point 6 IN 210 211 

下降后,创造,该数据库在最后叫日期添加一列,并将当天的日期作为默认值。我的问题是在上午12:00导入数据时,当前日期实际上是明天。出于会计目的,我需要这些数据才能有同一天。

我花了瞎猜,并尝试这个,但语法都错了......

[Date] [datetime] DEFAULT if(DATEPART(hh)=24) CONVERT(GETDATE(DATEPART(dd)-1)) 

是在创建表查询的if语句这样的可能吗?有没有更好的方法来解决这个问题?

感谢您的帮助!

+0

你试过['dated datediff'](http://www.w3schools.com/sql/func_datediff.asp)? – bonCodigo

+0

我确定我错误地使用了datediff,但我尝试使用convert(varchar(2),getdate(),108)来声明一个变量来收集当前小时,并在像这样使用它时使用它:select datediff(hh, 24小时)。它回到了-240 – bonneyt

回答

1

是的,你可以设置一个默认值,但你想要的语法是正确的:

[date] datetime default (case when datepart(hh, getdate()) = 24 then getdate() - 1 else getdate() end) 

不过,我不认为你应该有一个名为“日期”字段中的值datetime 。如何:

AsOfDate date default (case when datepart(hh, getdate()) = 24 then cast(getdate() - 1 as date) else cast(getdate() as date) end) 
+0

我相信会做到这一点!今晚午夜过后我肯定会知道的。感谢您的帮助,以及日期字段名称的建议! – bonneyt

+0

@bonneyt。 。 。说实话,我从来没有使用'case'语句作为默认值,并很高兴看到它的工作原理。我将来可能会使用它。 –