Предполагая, что предоставленное значение является числовым, а не DATE, вы можете использовать TO_CHAR , но вам необходимо преобразовать числовое значение в строку, а затем DATE (юлианский), прежде чем окончательно отформатировать его:
SELECT TO_CHAR(TO_DATE('1', 'dd'), 'ddth')
FROM DUAL
Результат:
01st
При тестировании использование «d» для формата не вернуло ожидаемых результатов, поскольку значение интерпретировалось как юлианская дата. Либо подставьте в строку выходные данные, чтобы удалить ведущий ноль, либо укажите полную строку даты (не имеет значения для TO_CHAR, потому что его интересует только день месяца):
SELECT TO_CHAR(TO_DATE('1900-01-01', 'YYYY-MM-dd'), 'dth')
FROM DUAL
Поскольку календарные дни заканчиваются 31, вместо этого используйте значение года для обработки чисел, превышающих 31:
SELECT TO_CHAR(TO_DATE('32-01-01', 'YYYY-MM-dd'), 'yyth')
FROM DUAL
Результат:
32nd