2009-04-06 5 views
0

내 프로젝트 은 VB (5 또는 6) *을 사용하여 SQL Server 데이터베이스에 날짜를 저장해야합니다. SQL datetime 유형에는 원하지 않는 시간이 포함됩니다. 나는 또한 VB의 날짜 표현이 SQL Server의 것을 반영하지 않는다는 것을 알고있다.VB에서 MS SQL에 날짜 만 저장하는 방법은 무엇입니까?

VB의 날짜 형식에서 SQL 데이터베이스에 저장된 날짜를 어떻게 그 날짜의 자정에 datetime으로 저장할 수 있습니까?

편집 : 날짜를 사용하여 줄 아래로 줄을 선택해야하므로 읽을 때 잘릴 수 없습니다.

* 알고 있습니다. 나는 당신이었습니다. 여기에서 시작하지 않을 것입니다. 그러나 제약 조건을 감안할 때, VB6/MS SQL이 존재합니까?

답변

3

VB6은 날짜/시간 값의 날짜 부분을 반환하고 시간 부분은 "제로로 출력"한 DateValue() 함수를 가지고 있습니다. (참고 : 날짜/시간 변수의 시간 부분이 "제로 아웃"할 때, 시간이 오전 12:00으로 해석됩니다.)

+0

DateValue()에 VB6 Date를 전달하면 DateValue()가 문자열을 기대하고 문자열을 예상대로 반환하기 때문에 date에서 string으로 암시 적으로 변환됩니다. 그러나 두 전환 모두 지역 설정을 사용하므로 안전합니다.암시 적 변환을 트리거하면 가끔씩 물릴 수 있습니다. – MarkJ

0

DateTime 열을 사용하고 프레젠테이션 수준에서 시간을 자릅니다.

+0

죄송 합니다만, 그것은 열쇠의 일부를 구성하므로보기를 변경할 수 없습니다. 선택해야하며 날짜 시간 범위가 필요하지 않습니다. –

+0

그건 중요하지 않습니다. 단지 항상 자정의 시간을 저장하십시오. –

0

삽입하고 같은 날짜 업데이트 시도 :

CAST(FLOOR(CAST(@DateTime AS float)) AS datetime) 

우리는 이것을 UDF에 넣었으며 기본적으로 datetime에서 시간 부분을 제거합니다.

2

SQL Server 2008에는 new date and time data types이 있습니다. 시간 구성 요소를 저장하지 않으려면 "날짜"데이터 형식이 있습니다.

+0

Ah. 불행히도 2008 년 고객 사이트에서 사용할 수있는 것에 의존 할 수 없습니다! –

0

VB에서는 Date() 함수를 사용하여 시간 요소가없는 현재 날짜를 반환 할 수 있습니다.

Command 개체와 함께 ADO Parameter 개체를 사용하는 경우 OLE DB 공급자는 VB Date 형식을 SQL Server DATETIME 값으로 변환해야합니다.

SQL Server (SQL 2005 이전 SQL 형식)에서는 시간 요소가있는 날짜를 추가 할 수 없도록 열에 CHECK 제약 조건을 만들어야합니다 (명확한 언어 '안전한'형식을 사용함에 유의하십시오) 내 DATETIME 리터럴) 예)

ALTER TABLE MyTable ADD 
    vb_date DATETIME NOT NULL 
    CONSTRAINT vb_date__no_time_element 
     CHECK ((vb_date = DATEADD(DAY, DATEDIFF(DAY, '1990-01-01T00:00:00.000', vb_date), '1990-01-01T00:00:00.000'))); 
0

나는 단지 DateSerial을 사용하여 필요한 날짜를 만듭니다. 당신은 1 년, 1 개월 그리고 1 일을 통과하고 그것은 당신에게 자정을 가진 시간을 시간으로줍니다. 그런 다음이를 사용하여 ADO 명령 또는 유사한 매개 변수로 전달할 수 있습니다. 당신이 그것을 읽을 때, 그것은 문제가되지 않도록 자정을 가질 것입니다. 나는 문자열 변환이 없으므로 DateValue보다 더 좋아한다. 정말로 원한다면 DateSerial을 사용하는 DateValue와 같은 함수를 직접 만들 수 있습니다.

Function JustTheDatePlease(ByVal dtSource As Date) As Date 

    JustTheDatePlease = DateSerial(Year(dtSource), Month(dtSource), Day(dtSource)) 

End Function 

어떤 이유로 당신은 매개 변수화 된 쿼리를 사용하지 않는 경우, 당신은 정말이에 대한 좋은 변명, 당신이 당신의 쿼리에서 날짜의 ODBC 표준 양식을 사용할 수 있어야합니다. 날짜를 {d 'yyyy-mm-dd'} (예 : {d '2009-04-06'})으로 지정하십시오.

관련 문제