перевести название месяца - PullRequest
0 голосов
/ 12 июня 2019

У меня есть таблица с именем CREATED_AT. Я написал запрос и получил ответ, подобный следующему: Score D 27 01 17 02 80 03 55 06

Это мой запрос:

SELECT SUM(AMOUNT) as scores,to_char(CREATED_AT, 'MONTH') as  d  
FROM C_SCORES 
WHERE USER_ID =201 and to_char(CREATED_AT, 'YYYY') ='1398' 
GROUP BY to_char(CREATED_AT, 'MONTH');

код объекта:

    public class ScoreCategorizeWithMonth {

        private int Scores;
        private int month;
    private String monthfa;


 public String getMonthfa() {
        switch (month) {
            case 1:
                monthfa = "فروردین";
                break;
            case 2:
                monthfa = "اردیبهشت";
                break;
            case 3:
                monthfa = "خرداد";
                break;
            case 4:
                monthfa = "تیر";
                break;
            case 5:
                monthfa = "مرداد";
                break;
            case 6:
                monthfa = "شهریور";
                break;
            case 7:
                monthfa = "مهر";
                break;
            case 8:
                monthfa = "آبان";
                break;
            case 9:
                monthfa = "آذر";
                break;
            case 10:
                monthfa = "دی";
                break;
            case 11:
                monthfa = "بهمن";
                break;
            case 12:
                monthfa = "اسفند";
            default:
                monthfa = "";
        }



        return monthfa;
    }

    }

этот код находится в контроллере:

 @GetMapping(value = "score-Categorize-months")
    public List<ScoreCategorizeWithMonth> scoreCategorizedWithMonths()
    {
        return   iScoresSrv.scoreCategorizeWithMonths(userInfo.getUserId());
    }

мой вопрос:

2 - мой ответ - месяцы, которые существуют в базе данных. Как показать даже месяцыего нет в базе данных

 {
    "scores": 27,
    "month": 1,
    "monthfa": "فروردین"
  },
  {
    "scores": 17,
    "month": 2,
    "monthfa": "اردیبهشت"
  },
  {
    "scores": 84,
    "month": 3,
    "monthfa": "خرداد"
  },
  {
    "scores": 55,
    "month": 6,
    "monthfa": "شهریور"
  } 

Я хочу показать также месяцы 4..5 с оценкой = 0

спасибо

Ответы [ 3 ]

1 голос
/ 12 июня 2019

Шаг 2 и 3: Вы можете достичь с помощью следующего запроса:

select sum(AMOUNT) as scores, month from  
(select AMOUNT ,to_char(CREATED_AT, 'MONTH') as month from C_SCORES WHERE USER_ID 
 =201 and to_char(CREATED_AT, 'YYYY') ='1398'
 union
 select 0 as AMOUNT, Month from
 (SELECT 1 AS MONTH
 UNION SELECT 2 AS MONTH
 UNION SELECT 3 AS MONTH
 UNION SELECT 4 AS MONTH
 UNION SELECT 5 AS MONTH
 UNION SELECT 6 AS MONTH
 UNION SELECT 7 AS MONTH
 UNION SELECT 8 AS MONTH
 UNION SELECT 9 AS MONTH
 UNION SELECT 10 AS MONTH
 UNION SELECT 11 AS MONTH
 UNION SELECT 12 AS MONTH) TBL1) TBL2
 group by month;

Просто замените 1-12 как значение вашего месяца

0 голосов
/ 23 июня 2019

Я просто добавляю sume-код в java для заполнения недопустимых индексов. это было так легко решить. но я был немного смущен, и ни один из ответов не помог мне

 public List<ScoreCategorizedWithMonth> scoreCategorizeWithMonths(Long userId) {
        List<ScoreCategorizedWithMonth> monthCategory = scoreDao.scoreCategorizeWithMonths(userId);
        List<ScoreCategorizedWithMonth> result = new ArrayList<>();
        for (int i=1; i<=12;i++)
        {
            ScoreCategorizedWithMonth scoreCategorizedWithMonth = checkMonthCatIsExist(i, monthCategory);
            result.add(scoreCategorizedWithMonth);
        }
        return result;
    }

    private ScoreCategorizedWithMonth checkMonthCatIsExist(int month, List<ScoreCategorizedWithMonth> monthCategory) {
        for (ScoreCategorizedWithMonth cat:monthCategory) {
            if(cat.getMonth() == month){
                return cat;
            }
        }
        ScoreCategorizedWithMonth temp= new  ScoreCategorizedWithMonth();
        temp.setMonth(month);
        temp.setScores(0);
        return temp;
    }
0 голосов
/ 12 июня 2019

Вы можете использовать файлы свойств ...

Эта ссылка предоставляет один пример из многих: http://zetcode.com/java/resourcebundle/

в этом учебном пособии 'words.properties' - это ваш языковой файл по умолчанию и резервный язык, а words_de.properties и words_sk.properties для настроенного переведенного языка

В этой строке: source.setBasenames("messages/words"); он попытался передать файлы перевода алгоритму.

и с помощью messageSource.getMessage("w1", null, Locale.GERMAN) он выбирает нужный язык ....

Обратите внимание, что sk в words_sk.properties - это iso-код языка, который в случае персидского языка равен fa, а английского - en ...

Некоторые системы также используют локализацию, которая определяет пользовательский символ и форматирование, и я не уверен, что этот алгоритм поддерживает такой тип именования ... которому вы передаете дополнительный параметр: fa-IR или en-US

Если честно, я не заглядывал глубоко, но с тех пор, как использовал его много лет назад, это принцип.

...