2010-01-21 8 views
0

"Post"라는 테이블에 2009-11-25, 12:42AM IST 형식의 문자열로 "postingdate"라는 필드에 값이 있습니다.SQL 쿼리의 분할 문자열

날짜 범위를 기반으로 세부 정보를 가져 오려면 쿼리가 필요합니다. 다음 쿼리를 시도했지만 오류가 발생합니다. 이 문제를 해결하도록 안내해주세요. 미리 감사드립니다. 정말 문자열의 경우

select postingdate 
from post 
where TO_DATE(postingDate,'YYYY-MM-DD')>61689 
    and TO_DATE(postingDate,'YYYY-MM-DD')<61691 
+0

Oracle, MySql, SQL Server 또는 다른 RDBMS를 사용하고 있습니까? – Kane

+0

어떤 플랫폼을 사용하고 있습니까? – Hogan

+1

제쳐두고 : 문자열 필드에 날짜 값을 저장하면 안됩니다. 거기에는'date' 타입이 있습니다. –

답변

0

SQL 서버에서 당신은 당신이 YYYY-MM-DD 형식으로 있다고 운이 좋다,

Select postingdate from post 
    where postingdate between '6/16/1969' and '6/16/1991' 
0

을 말할 수있다. 가장 중요한 숫자가 왼쪽에 있기 때문에 해당 형식을 문자열로 정렬하고 비교할 수 있습니다. 예를 들어 :

select * 
from Posts 
where StringDateCol between '2010-01-01' and '2010-01-02' 

, 12:42AM IST 부속물의 영향을받지 않습니다이 방법으로 비교, 날짜로 문자열을 변환 할 필요가 없습니다. 물론 테이블에 다른 시간대의 날짜가 포함되어 있지 않으면 :)

+0

감사합니다. 알았습니다. – Mani

+0

하지만 같은 날짜를 사용할 때 어떤 레코드도 얻지 못했습니다 – Mani

+0

하루를 얻으려면''2010-01-01 '<= col and col <'2010-01-02'' – Andomar

0

날짜 범위 쿼리를 실행하기 전에 문자열을 날짜로 변환해야합니다. 시간 부분에 관심이 없다면 문자열 만 사용하면 빠져 나갈 수 있습니다.

실제 함수는 날짜가 문제가 나타내는 문자열 컬럼에 대한 쿼리의 모든 종류를 수행하기 위해 노력하고, 당신의 RDBMS 당신이 지금 본 것처럼

for strings only 
select * from posts 
where LEFT(postingDate,10) > '2010-01-21' 

or 
for datetime (Sybase example) 
select * from posts 
where convert(DateTime,postingDate) between '2010-01-21' and '2010-01-31' 
1

에 따라 달라집니다.

  1. 가 DATE 또는 TIMESTAMP 데이터 타입의 일종으로 postingdate 열을 변환 : 당신은 몇 가지 옵션을 가지고있다. 필자는이 필드를 사용하여 더 빠르고 유연하며 오류가 발생하지 않는 테이블을 쿼리하게 만들기 때문에 이것이 최선의 선택이라고 생각합니다.

  2. postingdate를 문자열로두고 함수를 사용하여 비교할 때의 날짜로 다시 변환하십시오. 이것은 데이터베이스가 기능 기] 인덱스를 지원하지 않는 한 대부분의 u 리가 전체 테이블 스 5이 될 때 성능. 제입니다.

  3. postingdate를 문자열로 남겨두고 다른 문자열과 비교하십시오. 당신이 찾은 것 같아 원거리 쿼리를 이런 방식으로 수행하는 방법을 생각해 내기가 어렵 기 때문에 좋은 선택은 아닙니다.

데이터가 변환 되었다면. 행운을 빕니다.