Вот немного запутанный способ сделать это только в SQL. Ниже приведен пример, который вы можете сразу запустить в своем экземпляре, чтобы проверить его:
select to_date(replace(VAL, '''', ''), 'Mon dd, yyyy') as NEWDATE
from (with TST1 as
(select length(DTXT) - length(translate(DTXT, REPLVAL || VALSEP, REPLVAL)) + 1 as NUMVAL
,VALSEP
,DTXT || VALSEP as DTXT
from (select replace('''Dec 24, 2011'',''Dec 26, 2011'',''Dec 18, 2011'',''Dec 27, 2011'''
,''','''
,'''|''')
as DTXT
,'|' as VALSEP
,chr(0) as REPLVAL
from dual))
select substr(TST1.DTXT
,decode(rownum, 1, 1, instr(TST1.DTXT, VALSEP, 1, rownum - 1) + length(VALSEP))
, instr(TST1.DTXT, VALSEP, 1, rownum)
- decode(rownum, 1, 0, instr(TST1.DTXT, VALSEP, 1, rownum - 1))
- 1)
as VAL
from TST1
connect by level <= TST1.NUMVAL)
То, что он делает, это берет ваши разделенные запятыми даты и преобразует их в отдельные записи, которые затем могут быть преобразованы в тип даты. В вашем сценарии вы можете заменить подзапрос, который выбирает двойной, вашей функцией, например ::100100
select *
from wfdisplaymgmt
where programstartdate IN (
select to_date(replace(VAL, '''', ''), 'Mon dd, yyyy') as NEWDATE
...
select replace(myfunctioncall()
,''','''
,'''|''')
as DTXT
,'|' as VALSEP
,chr(0) as REPLVAL
from dual
...
Что я сделал здесь, так это заменил разделители запятых на разделители каналов, так как запятая появляется в формате даты. Кроме того, я добавил разделитель канала в конец текста, чтобы включить последнее значение. Если вам нужна дополнительная информация о том, что делает каждый бит, добавьте комментарий.