2013-01-31 4 views
1

처음에 충족되는 경우, 설정 기본값은 조건이 SQL 모두 2008

는 내가 저장 한 데이터베이스를 가지고 ... 나는 SQL 쿼리 아주 새로운, 그래서 내가 무식한 소리하면 내가 사과 job을 매시간 삭제하고 테이블을 생성합니다. 이 데이터는 데이터베이스가 끝이라고 날짜에 열을 추가 드롭 후 만들

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 

1 ~ 24의 모든 시간이고 기본으로 오늘날의 날짜를 설정 제외 테이블은 다음과 같습니다. 내 문제는 오전 12시에 데이터를 가져올 때 현재 날짜가 실제로 내일입니다. 회계 목적으로, 나는 그 데이터가 같은 날을 가져야한다.

나는 어둠 속에서 총을 가지고 가고,하지만이 시도 구문은

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

가 생성 테이블 쿼리에서이 가능한 같은 if 문입니다 ... 모든 잘못? 이것에 대해 갈 수있는 더 좋은 방법이 있습니까?

도움 주셔서 감사합니다.

+0

['datediff'] (http://www.w3schools.com/sql/func_datediff.asp)를 사용해 보셨습니까? – bonCodigo

+0

나는 datediff를 잘못 사용하고 있었을 것이라고 확신하지만 convert (varchar (2), getdate(), 108)를 사용하여 현재 시간을 수집하고 이것을 다음과 같이 datediff에서 사용하는 변수 선언을 시도했다. 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' 문을 사용한 적이 없었으며 그것이 작동한다는 것을보기 위해 기뻤다. 나는 이것을 위해 나중에 사용할지도 모른다. –