2010-01-04 10 views
2
나는 기존 RDB 데이터베이스에 연결되는 닷넷 윈폼 appliation에서 일하고 있어요

에서 다음 SQL 선택 날짜를 개선하는 방법 2010 년 1 월 4 일은 정수 20100104)<p>날짜 필드의 일부</p>이 (상상 정수로 저장됩니다 ... RDB

닷넷 세계에서 나는 datetime 개체로 작업하고 싶었고 정수를 날짜로 변환 할 수 있었고, 라인을 많이 차지하고 오류가 발생하기 쉽고 누구나 개선 할 수 있는지 궁금합니다 ... 감사합니다.

주 - 나는

가 여기 날짜로 정수를 선택 내 현재의 방법입니다 ... 그래서 밖으로 질문 "기능"어떤 형태를 만들어 데이터베이스를 편집 할 수 없습니다 :

select 
CAST(
SUBSTRING(DATE_COL AS VARCHAR(8)) FROM 1 FOR 4) || 
'-' || 
SUBSTRING(CAST(DATE_COL) AS VARCHAR(8)) FROM 5 FOR 2) || 
'-' || 
SUBSTRING(CAST(DATE_COL) AS VARCHAR(8)) FROM 7 FOR 2) || 
' 00:00:00' 
AS TIMESTAMP) AS DATE_COL 
from MY_TABLE 
where ... 

답변

2

. 나는 'YYYYMMDDHHNNSSTT은'연 - 월 - 일 -시 - 분 - 초 - 분수 형식의 문자열이었다

CAST('YYYYMMDDHHMMSSTT' AS TIMESTAMP) 

같은 것을 수행하여 TIMESTAMP 데이터 형식으로 변환하는 방법이 있다는 것을 기억하는 것. 여기서 TIMESTAMP 대신 DATE ANSI를 사용해야 할 수도 있습니다. 제가 말했듯이, 그것은 오래되었습니다. 그럼에도 불구하고 다음 사항이 적용될 수 있습니다.

SELECT CAST((CAST(DATE_COL AS CHAR(8)) || '00000000') AS TIMESTAMP)... 

아직보기 흉하지만 어쩌면 모든 부분 문자열보다 낫습니다. 어쨌든, 그걸 가지고 놀아 라. 그리고 나는 네가 그것을 얻을 것이라고 확신한다.

+0

CAST (CAST (DATE_COL AS VARCHAR (8)) DATE VMS)와 매우 유사한 솔루션을 사용하여 종료했습니다. – davidsleeps

+0

Ah-ha! 날짜 VMS! 나는 그것이 * something *이었던 것을 알고 있었다! :-) 당신의 생각을 자극하는 것을 돕기에 다행. –

0

왜 LINQ 라이브러리를 사용하지 않습니까? 그것은 매우 훌륭하고 강력합니다.

실행중인 일반적인 쿼리는 무엇입니까 (고급 의사 코드를 참조하십시오). 당신이 문자열로 date_col 캐스팅 한 후

+1

요점은 포스터가 다른 것을하기 전에 변환해야한다는 것입니다. LINQ는 모든 것에 대한 해답이 아닙니다! –

+1

미치와 동의, 난 그저 .net 코드 (그러므로 linq 또는 무엇이든)는 이미 날짜 필드를 다루고 있다고 생각합니다. – davidsleeps

1

오라클에서는 TO_DATE를 사용할 수 있습니다

TO_DATE(TO_CHAR(date_col), 'YYYYMMDD') 

... 또는 날짜 형식에 대한 'YYYYDDMM을'.

참고 : 나는 RDB 엉망으로했기 때문에 그것은 잠시이었다

+0

OMG 조랑말, 오라클 RDB 7은 오라클과 동일합니까? 나는 그들이 다른 줄 알았는데 ... – davidsleeps

+0

방금 ​​추가 솔루션을 추가 매개 변수 (각각에 대해 3을 원한다)를 입력하도록 강요한다는 점을 제외하고는 솔루션이 작동하는 것처럼 보일 것이라고 생각했지만 환경과 관련이 있다고 생각합니다. 당신의 솔루션 ... 예. TO_DATE (TO_CHAR (date_col, '00000000', 'NLS ...'), 'YYYYMMDD', 'NLS ...') – davidsleeps

+0

오라클 초기 작업은 8i입니다. –