다음을 통해 공유


SQL에서 C로 날짜/시간 데이터 형식 변환

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

다음 표에서는 SQL Server 날짜/시간 형식에서 C 형식으로 변환할 때 고려해야 할 문제를 나열합니다.

변환

SQL_C_DATE SQL_C_TIME SQL_C_TIMESTAMP SQL_C_SS_TIME2 SQL_C_SS_TIMESTAMPOFFSET SQL_C_BINARY SQL_C_CHAR SQL_C_WCHAR
SQL_CHAR 2,3,4,5 2,3,6,7,8 2,3,9,10,11 2,3,6,7 2,3,9,10,11 6 1 6
SQL_WCHAR 2,3,4,5 2,3,6,7,8 2,3,9,10,11 2,3,6,7 2,3,9,10,11 6 1 6
SQL_TYPE_DATE 확인 12 13 12 13,23 14 16 16
SQL_SS_TIME2 12 8 15 확인 10,23 17 16 16
SQL_TYPE_TIMESTAMP 18 7,8 확인 7 23 19 16 16
SQL_SS_TIMESTAMPOFFSET 18,22 7,8,20 20 7,20 확인 21 16 16

기호 설명

기호 의미
확인 변환 문제가 없습니다.
6 SQL Server 2008(10.0.x) 이전의 규칙이 적용됩니다.
2 선행 공백과 후행 공백이 무시됩니다.
3 문자열은 날짜, 시간, 표준 시간대 또는 표준 시간대 오프셋으로 구문 분석되며 소수 자릿수 초 동안 최대 9자리를 허용합니다. 표준 시간대 오프셋이 구문 분석되는 경우 시간이 클라이언트 표준 시간대로 변환됩니다. 이 변환 중에 오류가 발생하면 SQLSTATE 22018 및 "Datetime 필드 오버플로" 메시지와 함께 진단 레코드가 생성됩니다.
4 값이 유효한 날짜, 타임스탬프 또는 타임스탬프 오프셋 값이 아니면 SQLSTATE 22018 및 "캐스트 사양의 문자 값이 올바르지 않습니다"라는 메시지가 포함된 진단 레코드가 생성됩니다.
5 시간이 0이 아니면 SQLSTATE 01S07 및 "Fractional 잘림" 메시지와 함께 진단 레코드가 생성됩니다.
6 값이 유효한 시간, 타임스탬프 또는 타임스탬프 오프셋 값이 아니면 SQLSTATE 22018 및 "캐스트 사양의 문자 값이 올바르지 않습니다"라는 메시지가 포함된 진단 레코드가 생성됩니다.
7 날짜 구성 요소가 무시됩니다.
8 소수 자릿수 초가 0이 아니면 SQLSTATE 01S07 및 "Fractional 잘림" 메시지와 함께 진단 레코드가 생성됩니다.
9 값이 유효한 날짜, 시간, 타임스탬프 또는 타임스탬프 오프셋 값이 아니면 SQLSTATE 22018 및 "캐스트 사양에 잘못된 문자 값"이라는 메시지와 함께 진단 레코드가 생성됩니다.
10 값이 유효한 시간인 경우 날짜 구성 요소는 현재 클라이언트 날짜로 설정됩니다.
11 값이 유효한 날짜이면 시간은 0으로 설정됩니다.
12 SQLSTATE 07006 및 "제한된 데이터 형식 특성 위반" 메시지와 함께 진단 레코드가 생성됩니다.
13 시간이 0으로 설정됩니다.
14 버퍼가 SQL_DATE_STRUCT 수용할 만큼 충분히 크지 않으면 SQLSTATE 22003 및 "숫자 값이 범위를 벗어났습니다"라는 메시지와 함께 진단 레코드가 생성됩니다.
15 날짜는 현재 클라이언트 날짜로 설정됩니다.
16 버퍼의 크기가 작아 변환된 문자열 중 소수 자릿수 초만 수용할 수 있는 경우 잘림이 발생하고 SQLSTATE 22001 및 '문자열 데이터의 오른쪽이 잘렸습니다.'라는 메시지가 포함된 진단 레코드가 생성됩니다. 버퍼가 날짜, 시간 또는 오프셋 구성 요소를 잘림하지 않고 문자열 값을 수용할 만큼 충분히 크지 않은 경우 SQLSTATE 22003 및 "숫자 값이 범위를 벗어났습니다"라는 메시지와 함께 진단 레코드가 생성됩니다. 날짜 및 타임스탬프오프 세트의 경우 변환된 문자열의 맨 오른쪽 부분에 소수 자릿수 초가 포함되지 않으므로 SQLSTATE 01004를 사용할 수 없습니다. 따라서 잘림으로 인해 데이터가 손실됩니다.
17 버퍼가 SQL_SS_TIME2_STRUCT 수용할 만큼 충분히 크지 않으면 SQLSTATE 22003 및 "숫자 값이 범위를 벗어났습니다"라는 메시지와 함께 진단 레코드가 생성됩니다.
18 시간이 0이 아니면 SQLSTATE 01S07 및 "Fractional 잘림" 메시지와 함께 진단 레코드가 생성됩니다.
19 서버 유형이 datetime 또는 smalldatetime이면 값이 TDS 연결 형식에 해당하며 smalldatetime은 4바이트 값이고 datetime은 8바이트 값입니다.

서버 유형이 datetime2이면 값이 SQL_TIMESTAMP_STRUCT 반환됩니다. 버퍼가 반환된 값을 수용할 만큼 충분히 크지 않으면 SQLSTATE 22003 및 "숫자 값이 범위를 벗어났습니다"라는 메시지와 함께 진단 레코드가 생성됩니다.
20 시간이 클라이언트 표준 시간대로 변환됩니다. 이 변환 중에 오류가 발생하면 SQLSTATE 22008 및 "Datetime 필드 오버플로" 메시지와 함께 진단 레코드가 생성됩니다.
21 버퍼의 크기가 작아 SQL_SS_TIMESTAMPOFFSET_STRUCT를 수용할 수 없으면 값이 SQL_SS_TIMESTAMPOFFSET_STRUCT로 반환됩니다. 그렇지 않으면 SQLSTATE 22003 및 "숫자 값이 범위를 벗어났습니다"라는 메시지가 포함된 진단 레코드가 생성됩니다.
22 날짜가 추출되기 전에 값이 클라이언트 표준 시간대로 변환됩니다. 이렇게 하면 타임스탬프오프 세트 형식을 사용하는 다른 변환과 일관성을 제공합니다. 이 변환 중에 오류가 발생하면 SQLSTATE 22008 및 "Datetime 필드 오버플로" 메시지와 함께 진단 레코드가 생성됩니다. 이로 인해 날짜가 단순 잘림으로 얻은 값과 달라집니다.

이 항목의 표에서는 클라이언트에 반환된 형식과 바인딩의 형식 간의 변환에 대해 설명합니다. 출력 매개 변수의 경우 SQLBindParameter에 지정된 서버 형식이 서버의 실제 형식과 일치하지 않으면 서버에서 암시적 변환이 수행되고 클라이언트에 반환된 형식이 SQLBindParameter를 통해 지정된 형식과 일치합니다. 이로 인해 서버의 변환 규칙이 앞의 표에 나열된 것과 다를 때 예기치 않은 변환 결과가 발생할 수 있습니다. 예를 들어 기본 날짜를 제공해야 하는 경우 SQL Server는 현재 날짜가 아닌 1900-1-1을 사용합니다.

참고 항목

날짜 및 시간 기능 향상(ODBC)