2010-03-15 8 views
0

일부 날짜 값을 int로 저장하는 것이 좋습니다. 즉, 201003150900데이터베이스 : 날짜 값을 숫자 값으로 저장

내가 시간대 정보를 잃어 버린다는 사실을 제외하면 그의 솔루션에 대해 염려해야 할 것이 있습니까? 이 열을 사용하는 모든 검색어는 '이후 또는 이전에'형식 조회가 간단 할 수 있습니다. 즉 datefield가 201103000000보다 작 으면 (내년 3 월 이전).

현재 응용 프로그램은 MSSQL2005를 사용 중입니다. 함정에 대한 어떤 조언도 감사합니다.

+2

일반 datetime 데이터 유형을 사용할 때 어떤 문제가 있습니까? –

+0

다른 Ui/View 솔루션에 대해 많은 시간대 오프셋 속임수를 사용하고 있음을 알고있었습니다. db는 앱이 주로 사용되는 위치와 다른 시간대에 있습니다. – Chin

+1

다른 시간대 : UTC로 날짜를 저장하고,'SELECT DATEDIFF (시간, GETDATE(), GETUTCDATE())'를 사용하여 오프셋을 찾고 거기에서부터 이동하십시오. 그렇게하면 db 서버 및/또는 사용자가 이동할 때 아무 것도 변경되지 않습니다. – tadamson

답변

3

적절한 datetime 데이터 유형을 사용하면 더 효율적인 저장 공간 (smalldatetime 4 바이트 사용)과 색인 생성을 제공하고 사용자에게 의미가 부여됩니다. 쉽게 개발할 수 있습니다. 그 (것)들을 사용하지 않기 위하여 당신은 강제적 인 논쟁을 생각해 내야 할 것입니다.

+0

int가 더 작아야한다고 추정했는지 알지 못했습니다. 감사. – Chin

+0

'smalldatetime'과'int'는 모두 4 바이트를 소비하지만, 질문에 나열된 예제 날짜는 int로 표현할 수 없습니다. 너무 큽니다. 다행히 도울 수있어. –

+0

. 고맙습니다 – Chin

1

UNIX timestamps을 사용하지 않는 이유는 무엇입니까? 그것들은 단지 int 일 뿐이지 만 201103000000만큼 넓지는 않습니다.

+0

+1 자신을 발명하는 대신 확립 된 표준을 사용하는 경우. 또한 : 두 날짜 사이의 초 수를 찾는 것과 같은 일부 작업은 사소한 작업이됩니다. –

+1

몇 달/년 추가와 같은 일부 작업은 날짜/날짜 및 날짜로 다시 캐스팅하고 모든 번역을 앞뒤로 수행하지 않으면 거의 불가능합니다. 내부 표현은 이미 숫자입니다. 왜 당신 자신을 굴리고 자신의 라이브러리를 써야합니까? –

+0

2038에서 –

1

더 유연한 DATETIME 또는 SMALLDATETIME 데이터 유형을 사용하십시오.

1

그렇게하는 유일한 이유는 비즈니스 인텔리전스 도구의 시간 차원 멤버 이름을 갖고 있기 때문입니다. 그것이 당신이 그것을 사용하고자하는 것이라면 그것은 의미가 있습니다.

그렇지 않으면 다른 사람이 지적한대로 기본 제공 시간 유형을 사용하십시오.

관련 문제