2011-10-05 1 views
0

내가는 C, 인 unixODBC는 오라클 및 날짜는 예상대로 모든 작품, 내가 날짜 필드없이 데이터베이스를 조회 할 때

select x from tableName where startDate <= now; 

같은 쿼리를 가지고 쿼리합니다. 오라클 데이터베이스에서 날짜 또는 타임 스탬프 열을 사용하자마자 내 쿼리는 아무것도 반환하지 않거나 오류가 발생합니다.

내가 무엇 :

snprintf(sql, sizeof(sql), "SELECT roomNo, userPass, adminPass, adminFlags, userFlags, bookId, is_locked, running_on_server FROM booking WHERE roomNo = '?' AND startTime <= { ts '?' } AND endTime >= { ts '?' } for update;");        
     stmt = ast_odbc_prepare_and_execute(obj, generic_prepare, &gps); 

? 다음 명령으로 값으로 대체 될 것이다

SQLBindParameter(stmt, i + 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, strlen(gps->argv[i]), 0, gps->argv[i], 0, NULL); 

난 TS 잘못된 식별자 [이 MSDN에서 찍은 다른 보드에 의해 추천되었다라고 오류가 쿼리를 실행할 때 -이 오류를 일으킬 수있다 ]

하지만 제거하고 데이터베이스에 문자열을 보내더라도 빈 결과가 다시 나타납니다. 또한 매개 변수를 SQL_TIMESTAMP 및 SQL_DATE로 바인드하려고했지만이 역시 도움이되지 않았습니다.

누군가가 나를 도울 수 있기를 바랍니다.

미리 감사드립니다. Chris

답변

0

DATE 데이터 유형을 Oracle 쿼리 또는 문자열로 표시된 날짜로 보내십니까?

오라클 측에서 문자열 변수로 날짜를 보내려면 oracle "TO_DATE"함수 (http://www.techonthenet.com/oracle/functions/to_date.php)를 사용하여 SQL 문에서 사용할 문자열로 변환해야합니다 (startDate 또는 startTime/endTime이 데이터베이스의 DATE 열이라고 가정).

주먹 SQL의 예는 다음과 같아야합니다 변수가 "지금"문자열 (시간 포함)를 '05 옥트 2011 16시 15분 23초 '를 포함했다

SELECT x 
    FROM tableName 
WHERE startDate <= TO_DATE(now, '<date-format>'); 

경우

다음 TO_DATE는 것 수 :

TO_DATE(now, 'DD-MON-YYYY HH24:MI:SS') 

당신이 날짜 문자열을 비교하고 오라클이 기본 NLS 매개 변수를 사용하고 그 형식을 적용하려고합니다 해당 날짜의 형식을 지정하지 않은 경우. 따라서 TO_DATE를 사용하여 날짜 형식을 지정하는 것이 좋습니다.

희망 하시겠습니까?

관련 문제