Search code examples
oracle

What is alternative of Find_in_set of mysql in Oracle


select   CASE
          WHEN ComExgRateDetailLog.NotificationMinute = '*'
          THEN
             1
          ELSE
             IF(FIND_IN_SET(
                   CAST(
                      DATE_FORMAT(
                         DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:00'),
                         '%i') AS SIGNED),
                   ComExgRateDetailLog.NotificationMinute) > 0,
                1,
                0)
       END

       From ComExgRateDetailLog

I want same result in oracle. What is alternative option of find_in set in oracle?

Here ComExgRateDetailLog.NotificationMinute contains value like '0,15,30,45' So query should be like

select   CASE
          WHEN ComExgRateDetailLog.NotificationMinute = '*'
          THEN
             1
          ELSE
             IF(FIND_IN_SET(
                   CAST(
                      DATE_FORMAT(
                         DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:00'),
                         '%i') AS SIGNED),
                   '0,15,20,45') > 0,
                1,
                0)
       END

       From ComExgRateDetailLog

Solution

  • select FIND_IN_SET('15', '0,15,20,45') from dual would return 2
    

    In order to achieve this in oracle use the INSTR function, but INSTR is not exactly the same as FIND_IN_SET. INSTR considers a comma, space, anything inside a string as a character.

    SELECT INSTR ('0,15,20,45', '15',1,1) FROM dual would return 3
    

    You can read about INSTR here.