Oracle
使用超過 22 個字元的輸出(to_char)日期格式字元串是否安全(ORACLE 11)
ORACLE SQL 手冊(主要 11.1 SQL 手冊的第 2-58 頁)指出:
日期時間格式模型的總長度不能超過 22 個字元。
但是,我已經能夠為 TO_CHAR 使用具有更多字元的格式字元串,幾乎所有字元都是文本“文字”。
這安全嗎(ORACLE 11)?(也許限制不包括非日期文字?)
例如:
SELECT TO_CHAR(sysdate, '"SOMESTRING_"YYYYMMDD"_SOME LOTS MORE STRINGS OF A FILENAME PREFIX"') FROM DUAL;
結果:
SOMESTRING_20200226_SOME LOTS MORE STRINGS OF A FILENAME PREFIX
它也適用於表格中的日期。
我想這樣做的原因是在數據庫列中建構一個文件名模板;否則我需要將日期格式放在單獨的欄位中。
PS請告訴我這是否應該在不同的社區提出。我以前從來沒有問過問題,所以我沒有名譽可以失去:-)。對人好點。
僅僅因為你可以跳下懸崖,並不意味著你應該。
REPLACE()
與令牌一起使用:select REPLACE('SOMESTRING_##DATE##_SOME LOTS MORE STRINGS OF A FILENAME PREFIX', '##DATE##', TO_CHAR(sysdate,'YYYYMMDD')) from DUAL;
您可以更進一步以允許使用不同的格式字元串:
with mytable as ( select 'SOMESTRING_##YYYYMMDD##_SOME LOTS MORE STRINGS OF A FILENAME PREFIX' as format_string from DUAL ) select REGEXP_REPLACE(format_string,'##(.*)##',TO_CHAR(sysdate,replace( regexp_substr( format_string, '##(.*)##', 1, 1),'##',''))) from mytable;
請注意,存在
TO_CHAR
導致 ORA-600 錯誤和會話崩潰的長標識符解析錯誤。