Главная > Oracle e-Business Suite > SQL Склонение количества ошибок


SQL Склонение количества ошибок


Пример SQL запроса для склонения слова «ошибка» для вывода количества ошибок: «Найдена 1 ошибка»; «Найдено 3 ошибки»; «Найдено 5 ошибок» :

select 
  val
 ,case when mod(val,10) between 2 and 4 then 'Найдено '||val||' ошибки'
       
       when val between 11 and 14 or mod(val,10) between 5 and 9 
            or mod(val,10) = 0 then 'Найдено '||val||' ошибок' 
                          
       when mod(val,10) = 1 then 'Найдена '||val||' ошибка'
 end str
from ( select level val from dual connect by level<=25 )

       VAL STR
---------- -------------------------------------------------------
         1 Найдена 1 ошибка
         2 Найдено 2 ошибки
         3 Найдено 3 ошибки
         4 Найдено 4 ошибки
         5 Найдено 5 ошибок
         6 Найдено 6 ошибок
         7 Найдено 7 ошибок
         8 Найдено 8 ошибок
         9 Найдено 9 ошибок
        10 Найдено 10 ошибок
        11 Найдено 11 ошибок
        12 Найдено 12 ошибки
        13 Найдено 13 ошибки
        14 Найдено 14 ошибки
        15 Найдено 15 ошибок
        16 Найдено 16 ошибок
        17 Найдено 17 ошибок
        18 Найдено 18 ошибок
        19 Найдено 19 ошибок
        20 Найдено 20 ошибок
        21 Найдена 21 ошибка
        22 Найдено 22 ошибки
        23 Найдено 23 ошибки
        24 Найдено 24 ошибки
        25 Найдено 25 ошибок
25 rows selected

Похожие записи:

  1. Дмитрий
    11 Июль 2017 в 17:59 | #1

    В case первые два условия необходимо переставить местами, иначе получается «Найдено 12 ошибки» (и так до 14):

    select
    val,
    case when val between 11 and 14 or mod(val,10) between 5 and 9
    or mod(val,10) = 0 then ‘Найдено ‘||val||’ ошибок’
    when mod(val,10) between 2 and 4 then ‘Найдено ‘||val||’ ошибки’
    when mod(val,10) = 1 then ‘Найдена ‘||val||’ ошибка’
    end str
    from ( select level val from dual connect by level<=25 )

  2. Дмитрий
    11 Июль 2017 в 17:59 | #2

    Сорри, с форматированием запроса некрасиво как-то вышло…

  1. Пока что нет уведомлений.