2011-03-06 4 views
0

DATETIME 열이있는 테이블에서 이와 같은 쿼리를 수행하려고합니다.Sybase 15에서 DATETIME 열이있는 SELECT 절

2011-03-06T15 : 53 : 34.890-05 : 00

내가 내 데이터베이스에 쿼리를 수행 할 필요가

SELECT * FROM table WHERE the_date = 
2011-03-06T15:53:34.890-05:00 

본인은 외부 소스에서 문자열 입력으로 다음 한 이 동일한 날짜를 포함하는 행을 추출하십시오. 내 데이터베이스에서 그것은 DATETIME으로 저장됩니다 다음과 같습니다

2011-03-06 15 : 53 다음 -5 떨어져 34.89이

아마 약간의 외부 입력을 조작 할 수 있습니다 (같은 띠 : 00). 하지만 datetime 열을 사용하여 간단한 선택을 수행하는 방법을 알 수는 없습니다.

나는 convert 함수를 찾았고 123 스타일은 내 요구 사항과 일치하는 것으로 보이지만 제대로 작동하지 않습니다. 여기에 내가 생각하는 스타일 (123)

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks125.htm

답변

3

에 대한 참조 링크입니다 변환의 약간 잘못 문서의 해당 버전에 설명.

이 형식에는 항상 세기가 있기 때문에 23을 사용해야한다고 생각합니다. 일반적으로 변환 할 100 범위는 세기를 연도 형식으로 추가합니다.

그 형식은 몇 초 밖에되지 않습니다.

더 많은 것을 원한다면 2 x 변환자를 함께 사용해야합니다. 즉 ymd 부분을 지나서 convert (varchar, datetime-column, 14)에 놓고 트림 된 문자열과 비교합니다. 밀리 초 비교는 Sybase 바이너리 저장 형식이 300ms의 입상을 가지고 있기 때문에 큰 시간 문자열을 얻은 위치에 따라 문제가 될 가능성이 큽니다. 따라서 원본 문자열이 다른 곳에서 왔을 경우 비교할 가능성이 없습니다. 즉, 밀리 초를 제거하고 문자열로 비교합니다. 그래서 어쩌면

: 테이블에서

SELECT * WHERE 변환 (VARCHAR, the_date, 23) = '2011-03-06T15 : 53 : 34'

그러나 컬럼의 변환이를 방지 할 수 그게 문제라면 인덱스 사용.

datetimes로 비교하면 변환이 rhs에 있지만 밀리 초가 the_date에 있는지를 알아야합니다. 그런 다음 색인을 사용할 수 있습니다.