我有一個選擇查詢,使用函數。按日期排序不使用小時和分鐘訂購
該函數使一個子串成爲一個字符串,獲取一個日期,然後按日期排序,並以正確的順序返回字符串。
所以,我有我的選擇:
SELECT DISTINCT ec.id_echange_candidat,
(select f_tridate_concat(f_concat(iw.nom_declencheur ||' ' || iw.prenom_declencheur ||'->'||iw.nom_valideur ||' ' || iw.prenom_valideur || ' demandé le '||to_date(to_char(iw.date_creation), 'DD/MM/YY HH24:MI:SS')|| ' : ' ||iw.avis), '$', 'demandé le ', ' : ', '')
from t_instance_workflow iw
where ec.id_echange_candidat = iw.id_objet) as resume_workflow
FROM t_echange_candidat ec
而且功能:
create or replace
FUNCTION F_TRIDATE_CONCAT (p_chaine VARCHAR2, p_sepFonction VARCHAR2, p_sepAvChampTri VARCHAR2, p_sepApChampTri VARCHAR2, p_sepFinal VARCHAR2)
RETURN VARCHAR2 AS
v_str VARCHAR2(32767);
BEGIN
SELECT replace(f_concat(ma_chaine), '$',p_sepFinal) INTO v_str FROM
(
SELECT REGEXP_SUBSTR(p_chaine, '[^'||p_sepFonction||']+', 1, LEVEL) ma_chaine
FROM dual
CONNECT BY INSTR(p_chaine, p_sepFonction, 1, LEVEL - 1) > 0
ORDER BY to_date(SUBSTR(ma_chaine,instr(ma_chaine,p_sepAvChampTri,1)+length(p_sepAvChampTri),(instr(ma_chaine,p_sepApChampTri,1))-(instr(ma_chaine,p_sepAvChampTri,1)+length(p_sepAvChampTri))),'DD/MM/YY HH24:MI:SS')
)
;
RETURN v_str;
END F_TRIDATE_CONCAT;
的事情是,它似乎它不使用小時和分鐘,由作出命令,所以,如果我有這樣的臺詞:
line 1 text ... 10/12/2013 text ... (with 11 pm in db)
line 2 text ... 10/12/2013 text ... (with 10 pm in db)
我會得到這個字符串:
line 1 text ... 10/12/2013 text ...
line 2 text ... 10/12/2013 text ...
雖然我應該得到這樣的:
line 2 text ... 10/12/2013 text ...
line 1 text ... 10/12/2013 text ...
因爲lines 2 date
是在充分10/12/2013 10:00:00
而lines 1 date
是完全10/12/2013 11:00:00
爲什麼不是用小時和分鐘,而在我的功能,我在我的訂單中使用格式日期,如「DD/MM/YY HH24:MI:SS」?
編輯:現在得到了我SELECT查詢使用TO_DATE當一個 「格式代碼出現兩次」 錯誤信息......
這意味着它成爲:
SELECT DISTINCT ec.id_echange_candidat,
(select f_tridate_concat(f_concat(iw.nom_declencheur ||' ' || iw.prenom_declencheur ||'->'||iw.nom_valideur ||' ' || iw.prenom_valideur || ' demandé le '||iw.date_creation|| ' : ' ||iw.avis), '$', 'demandé le ', ' : ', '')
from t_instance_workflow iw
where ec.id_echange_candidat = iw.id_objet) as resume_workflow
FROM t_echange_candidat ec
create or replace
FUNCTION f_concat (p_input VARCHAR2)
RETURN VARCHAR2
PARALLEL_ENABLE AGGREGATE USING t_f_concat;
create or replace
TYPE "T_F_CONCAT" AS OBJECT ("G_STRING"
VARCHAR2(32767),
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_f_concat)
RETURN NUMBER ,
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_f_concat,
value IN VARCHAR2)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateTerminate(self IN t_f_concat,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_f_concat,
ctx2 IN t_f_concat)
RETURN NUMBER
);
create or replace
type body t_f_concat is
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_f_concat)
RETURN NUMBER IS
BEGIN
sctx := t_f_concat(NULL);
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_f_concat,
value IN VARCHAR2)
RETURN NUMBER IS
BEGIN
SELF.g_string := self.g_string || '$' || value;
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateTerminate(self IN t_f_concat,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER IS
BEGIN
returnValue := RTRIM(LTRIM(SELF.g_string, '$'), '$');
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_f_concat,
ctx2 IN t_f_concat)
RETURN NUMBER IS
BEGIN
SELF.g_string := SELF.g_string || '$' || ctx2.g_string;
RETURN ODCIConst.Success;
END;
end;
嘗試by子句子查詢外移動您的訂單。 –
「TO_DATE()」的第一個參數是否與格式說明符「DD/MM/YY HH24:MI:SS」的格式完全相同? – hashbrown
@hashbrown,to_date()產生一個日期對象。根據定義,它們沒有格式。 –