Oracle

使用超過 22 個字元的輸出(to_char)日期格式字元串是否安全(ORACLE 11)

  • February 28, 2020

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 錯誤和會話崩潰的長標識符解析錯誤。

引用自:https://dba.stackexchange.com/questions/260678