【问题标题】:translate month name response翻译月份名称响应
【发布时间】:2019-06-12 08:54:04
【问题描述】:

我有一个名为 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": "شهریور"
  } 

我还想用 score=0 显示 4..5 的月份

谢谢

【问题讨论】:

  • 请一次提出一个问题,并确保问题清晰易懂。我删除了所有与 java 相关的标签,因为我在这里看不到 java 的相关性。
  • 我想也许我应该在我的视图代码中添加一些java代码..你为什么这样做?我正在使用 java :) @JoakimDanielson
  • 然后解释您的问题与 java 的关系并包含相关代码。这个问题既不清楚也很宽泛。
  • 好的。我添加一些解释。你能帮我吗?请@JoakimDanielson
  • 1.使用本地化资源系统。您使用数据库中的语言作为键,您可以翻译成任何语言(这里解释的太长了)。 2. 不清楚,,, 3.如果数据库中不存在月份,您需要为自己提供一个预期值列表,并与Score(如果存在)进行映射。 请注意,这个问题无法回答,因为有很多问题要求完全不同的东西。

标签: java oracle format locale navicat


【解决方案1】:

第 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 替换为您的月份值

【讨论】:

  • 每个月都有它的价值。实际上我希望它作为用户获得多少分数的报告
  • @maede 你说的每个月都有它的价值是什么意思?
  • 您能否让我知道您所说的每个月都有其价值是什么意思,并且根据您的查询,您正在过滤 user_id = 201 的记录,因此它将为您提供具有 id 的用户的记录201
  • [Err] ORA-00923: FROM 关键字未在预期的地方找到我尝试了你的答案。这有错误
  • 我认为你的数据库是一个 oracle,我已经在 MySQL 上尝试过这个查询并且它有效。可以请您发布您的查询
【解决方案2】:

您可以使用属性文件...

此链接提供了许多示例: http://zetcode.com/java/resourcebundle/

在该教程中,'words.properties' 是您的默认和备用语言文件,words_de.propertieswords_sk.properties 用于自定义翻译语言

在这一行:source.setBasenames("messages/words"); 他试图将翻译文件传递给算法。

并使用messageSource.getMessage("w1", null, Locale.GERMAN) 获取所需的语言....

注意words_sk.properties中的sk是语言iso代码,波斯语是fa,英语是en...

一些系统也使用本地化,它们定义了自定义字符和格式,我不确定这个算法是否支持那种命名......你传递了一个额外的参数:fa-IRen-US

说实话我看的不深,但自从我多年前使用它以来,就是原理。

【讨论】:

  • 我添加了 month.properties 和 month_fa.properties 并在 setDate() 方法中添加了以下代码: ResourceBundle persian=ResourceBundle.getBundle("month_fa",new Locale("fa","IR")) ; persian.getLocale();
  • 错误:找不到基本名称 month_fa、语言环境 fa_IR 的捆绑包
  • 这一行说明了在哪里查找文件:source.setBasenames("messages/words"); 老实说我不确定文件结构,因为每个 IDE 提供不同的文件结构
  • 我更新了问题请看@deadManN
【解决方案3】:

我只是在 java 中添加 sume 代码来填充无效的索引。 这很容易解决。但我有点困惑,没有一个答案对我有帮助

 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多