如果在SQL 2008中满足条件,则在列中设置默认值

如果在SQL 2008中满足条件,则在列中设置默认值,sql,sql-server-2008,tsql,create-table,getdate,Sql,Sql Server 2008,Tsql,Create Table,Getdate,首先,我对SQL查询非常陌生,所以如果我听起来很无知,我很抱歉 我有一个数据库,它有一个存储的作业,每小时删除并创建一个表。该表如下所示,只是在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

首先,我对SQL查询非常陌生,所以如果我听起来很无知,我很抱歉

我有一个数据库,它有一个存储的作业,每小时删除并创建一个表。该表如下所示,只是在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
在拖放和创建之后,数据库在末尾添加一个名为date的列,并将todays日期设置为默认日期。我的问题是在12:00am导入数据时,当前日期实际上是明天。出于会计目的,我需要这些数据在同一天

我在黑暗中拍了一张照片并尝试了这个,但是语法都错了

[Date] [datetime] DEFAULT if(DATEPART(hh)=24) CONVERT(GETDATE(DATEPART(dd)-1))
在CREATETABLE查询中可以使用这样的if语句吗?有没有更好的办法


谢谢你的帮助

是的,您可以设置默认值,但希望语法正确:

[date] datetime default (case when datepart(hh, getdate()) = 24 then getdate() - 1 else getdate() end)
但是,我认为在名为“date”的字段中不应该有
datetime
值。那么:

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

可以,您可以设置默认值,但希望语法正确:

[date] datetime default (case when datepart(hh, getdate()) = 24 then getdate() - 1 else getdate() end)
但是,我认为在名为“date”的字段中不应该有
datetime
值。那么:

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

你试过了吗?我肯定我用的datediff不正确,但我试过用convert(varchar(2),getdate(),108)声明一个变量来收集当前小时,并在datediff中使用它,如下所示:选择datediff(hh,24,@hour)。它返回了-240您尝试过了吗?我肯定我使用的datediff不正确,但我尝试过使用convert(varchar(2),getdate(),108)声明一个变量来收集当前小时,并在datediff中使用它,如下所示:选择datediff(hh,24,@hour)。我相信这会成功的!!今晚午夜后我肯定会知道的。感谢您的帮助,以及对日期字段名称的建议@邦尼。老实说,我从来没有使用过
case
语句作为默认值,并且很高兴看到它能够工作。我将来可能会用到这个。我相信这会奏效的!!今晚午夜后我肯定会知道的。感谢您的帮助,以及对日期字段名称的建议@邦尼。老实说,我从来没有使用过
case
语句作为默认值,并且很高兴看到它能够工作。我将来可能会用到这个。