2016-11-22 1 views
0

며칠 동안 나는 파이어 버드 쿼리에서 날짜에 문제가 있습니다. select 문에서 한 필드에서 3 개의 날짜를 연결하려고합니다.파이어 버드 날짜 concatention 변경 날짜 형식

까지 구축이 그것을 테스트 :

select 
data_wyst, data_sp, data_pop, 
data_wyst ||' | '|| data_sp ||' | '|| data_pop 
from rv_sp_dok 

결과는 다음과 같습니다 한 날짜가 null 다음 전체 CONCAT가 null이며,

2015-12-14; 2015-12-14; 2015-12-31; 14-DEC-2015 | 14-DEC-2015 | 31-DEC-2015 
2015-12-31; 2015-12-31; null; null 
2015-12-31; 2015-12-31; 2015-12-31; 31-DEC-2015 | 31-DEC-2015 | 31-DEC-2015 

그래서 때 날짜 형식은 YYYY-MM- '로 변경 DD '를'DD-MM-YYYY '로 변경하십시오. 결과 CONCAT은 다음과 같아야합니다

2015-12-14; 2015-12-14; 2015-12-31; 2015-12-14 | 2015-12-14 | 2015-12-31 
2015-12-31; 2015-12-31; null; 2015-12-31 | 2015-12-31 | 
2015-12-31; 2015-12-31; 2015-12-31; 2015-12-31 | 2015-12-31 | 2015-12-31 

문자열로 캐스팅 할 때 (절차 변환 date2string 제외) 날짜 형식을 변경하는 파이어 버드를 방지하기 위해 어떤 방법이 있나요?

는 // 편집 : 보인다에 방법은 문자열로 날짜를 변환합니다 절차 최고의 :

CREATE OR ALTER PROCEDURE DATE2STRING (DataIN Date) 
    returns (DataOut Varchar(10)) 
    AS 
     declare variable y Varchar(4); 
     declare variable m Varchar(2); 
     declare variable d Varchar(2); 
    begin 
    IF (DataIn is null) then 
    BEGIN 
     DataOut = ''; 
    END 
    ELSE 
    BEGIN 
     y = Substring(Extract(Year FROM DataIn) FROM 1 FOR 4); 
     m = Substring(Extract(Month FROM DataIn)+100 FROM 2 FOR 2); 
     d = Substring(Extract(Day FROM DataIn)+100 FROM 2 FOR 2); 

     DataOut = y || '-' || m || '-' || d; 
    END 
    SUSPEND; 
    end 

답변

3

즉,로

select 
data_wyst, data_sp, data_pop, 
COALESCE(data_wyst, '') ||' | '|| COALESCE(data_sp, '') ||' | '|| COALESCE(data_pop, '') 
from rv_sp_dok 

NULL의 사용 coalesce 기능이있을 수 있습니다 필드를 CONCAT하려면 외부 함수 (date2string은 AFAIK)를 사용하지 않고 날짜 형식을 제어하면 extract 함수 (예 :

)를 사용할 수 있습니다.
EXTRACT(YEAR FROM data_pop) ||'-'|| EXTRACT(MONTH FROM data_pop)||'-'|| EXTRACT(DAY FROM data_pop) 
+0

그럼 지금은 더 나은 해결책을 찾지 못했습니다. 그래서 추출물이나 추출물을 만드는 절차입니다. 아직도 파이어 버드가 날짜가 캐스팅 될 때 이것을 변경하는 이유는 무엇입니까?/ – Jerry1333

+0

@ Jerry1333 무엇을 변경합니까? 언 캐스트 필드의 날짜 형식은 ** 클라이언트 쪽 ** 응용 프로그램에서 날짜를 표시하고 캐스팅 필드는 ** 서버 쪽 **을 문자열로 변환합니다. 그 중 하나가 null 인 경우 전체 문자열이 null이된다는 사실은 SQL이 연결 연산자 ('||')를 정의하는 방식이기 때문입니다. –