在Oracle中是否存在与Translate()等效的MySQL

Joh*_*ohn 7 mysql oracle hibernate

我正在从Hibernate中的MySQL表中检索一些密码值,并将其替换为MySQL中的其他字符串.我知道Oracle中有translate()来进行替换,但我在MySQL中找不到任何相同的东西.除了MySQL中的Replace()还是可以用于相同的任何库之外,还有其他替代解决方案吗?

Vik*_*rti 5

到目前为止,MySQL 中还没有与 Oracle 的 TRANSLATE() 函数等效的函数。但是,您可以通过使用嵌套的REPLACE()函数来获得所需的结果。

添加示例 -
Oracle 查询 -
SELECT TRANSLATE('Vikas#Bharti-Infy', '#-', '_.') FROM dual;

Vikas_Bharti.Infy

等效的MySQL 查询将是 -
SELECT REPLACE(REPLACE('Vikas#Bharti-Infy', '#', '_'),'-','.');

Vikas_Bharti.Infy


小智 5

你可以创建一个这样的:

CREATE FUNCTION `translate`(subject varchar(255), what varchar(255), replace_to varchar(255)) RETURNS varchar(255)
begin
 declare c int unsigned default 0;
 declare result varchar(255);

 set result = subject;

 while c <= length(subject) do
  set result = replace(result, mid(what, c, 1), mid(replace_to, c, 1) );
  set c=c+1;   
 end while;

 return result; 
end
Run Code Online (Sandbox Code Playgroud)

然后使用:

mysql> select translate('(123) 1234-1234', '( )-','.,.,');
+---------------------------------------------+
| translate('(123) 1234-1234', '( )-','.,.,') |
+---------------------------------------------+
| .123.,1234,1234                             |
+---------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)