sql:翻译存在逗号的字典


函数1,获取翻译字典表

        tj_bmk.t_code_all:字典表名

        code_name:代码中文名

        code_id:代码

         file:代码类别

CREATE OR REPLACE FUNCTION codedetail (inkind IN VARCHAR2, incode IN VARCHAR2)
   RETURN VARCHAR2
IS
   detailvalue   tj_bmk.t_code_all.code_name%TYPE;
BEGIN

   IF inkind IS NULL OR incode IS NULL
   THEN
      RETURN NULL;
   END IF;

  SELECT nvl(code_name,code_id)
   INTO detailvalue
     FROM tj_bmk.t_code_all where code_id=incode AND fiel=inkind;


   RETURN detailvalue;
EXCEPTION
   WHEN NO_DATA_FOUND
   THEN
      RETURN incode;
     -- RETURN '';
END;

函数2,翻译包括用逗号隔开的代码

 先创建上面的函数,然后下面这个函数直接创建即可

create or replace function f_transation_detail(inkind varchar2,in_zdryxl in varchar2) return varchar2 is
  res varchar2(2000);
  start_index number := 1;
  end_index number := 1;
begin

  end_index := instr(in_zdryxl,',',start_index);
  if end_index + 1 > 1 then
    res := codedetail(inkind,substr(in_zdryxl, start_index, end_index - 1));
    start_index := end_index;
    while end_index + 1 > 1 loop
        end_index := instr(in_zdryxl,',',start_index + 1);
        if end_index = 0 then
          res := res ||','||codedetail(inkind,substr(in_zdryxl,start_index + 1));
        else
          res := res ||','||codedetail(inkind,substr(in_zdryxl,start_index + 1,end_index - start_index - 1));
        end if;
        start_index := end_index;
    end loop;
  else
    res := codedetail(inkind,in_zdryxl);
  end if;
  return(res);
end;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用MySQL的内置函数`GROUP_CONCAT()`和`FIND_IN_SET()`来实现这个需求。 假设我们有两张表,一张是字典表`dictionary`,包含`code`和`name`两个字段;另一张是需要翻译的表`translation`,包含一个`codes`字段,里面是逗号分隔的多个`code`,我们需要将其翻译为以逗号分隔的多个`name`。 可以使用以下SQL语句实现: ``` SELECT GROUP_CONCAT(d.name SEPARATOR ',') AS names FROM dictionary d WHERE FIND_IN_SET(d.code, translation.codes) > 0; ``` 这个SQL语句会首先通过`FIND_IN_SET()`函数找到`translation`表中每个`codes`字段中包含的`code`对应的`name`,然后通过`GROUP_CONCAT()`函数将多个`name`以逗号分隔的形式合并为一个字符串,并且起别名为`names`。 需要注意的是,在使用`FIND_IN_SET()`函数时,需要将`translation`表中的`codes`字段和`dictionary`表中的`code`字段都转换为逗号分隔的字符串,否则可能会出现匹配错误的情况。可以使用`CONCAT_WS()`函数来实现这个转换: ``` SELECT CONCAT_WS(',', translation.codes) AS code_str, GROUP_CONCAT(d.name SEPARATOR ',') AS names FROM dictionary d JOIN translation ON FIND_IN_SET(d.code, CONCAT_WS(',', translation.codes)) > 0 GROUP BY translation.id; ``` 这个SQL语句会将`translation`表中的每一行都匹配出对应的`name`,并且将`codes`字段转换为逗号分隔的字符串,起别名为`code_str`。然后通过`GROUP BY`语句将结果按照`translation`表中的每个`id`字段分组,确保每个`id`只有一个结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值