Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从数字中删除零_Sql_Oracle - Fatal编程技术网

Sql 从数字中删除零

Sql 从数字中删除零,sql,oracle,Sql,Oracle,如何从包含整数(数字)的列中删除零(不仅仅是前导零,而是每个位置的零)? 例如:0349010330应该变成349133 提前谢谢 REPLACE('0349010330', '0', ''); 这也有效 REPLACE('0349010330', '0'); 您可以使用子字符串和替换函数您可以使用: TO_编号(替换('0349010330',0))Oracle/PLSQL SELECT TO_NUMBER(REPLACE(TO_CHAR(0349010330),'0',''))

如何从包含整数(数字)的列中删除零(不仅仅是前导零,而是每个位置的零)? 例如:0349010330应该变成349133

提前谢谢

  REPLACE('0349010330', '0', '');
这也有效

  REPLACE('0349010330', '0');

您可以使用子字符串和替换函数

您可以使用: TO_编号(替换('0349010330',0))

Oracle/PLSQL

SELECT TO_NUMBER(REPLACE(TO_CHAR(0349010330),'0','')) FROM DUAL;
MySQL

解决方案在此->

`SELECT ROUND(AVG(SALARY)-AVG(TO_NUMBER(REPLACE(TO_CHAR(SALARY),'0')))+.5,0) FROM EMPLOYEES;`

HackerRank Mysql解决方案

MYSQL:

替换('0349010330','0','')

这将用空字符串替换字符串中的所有操作系统。

对于Mysql,请运行下面的查询

select ceil(Avg(Salary) - Avg(CAST(Replace(CAST(Salary as char(1000)),'0','') as unsigned))) from EMPLOYEES
以下是Hackerrank挑战的解决方案(MySQL)

  • REPLACE():用于从工资中删除0
  • AVG():用于计算平均工资
  • CEIL():用于获取下一个舍入整数

我认为您不需要
来替换(替换为字符(x),'0','')
相反,您可以简单地键入

替换(x,'0')

铸件可自动应用。
此外,如果不指定第一个值的替代项,则不必将0指定为空
replace(x,'0','')
原因
replace()
默认情况下会删除第一个值。

您可以在Oracle中使用replace,但请记住将结果转换为数字,因为replace返回CHAR结果

select to_number(replace(1001,0,'')) from dual
这是答案

替换(工资,0)

在hackerrank中发现了一个类似的问题..错误问题

从员工中选择ceil(平均工资)-平均工资(替换(工资,0))

SQL Server的解决方案

SELECT CEILING(AVG(SALARY))- CEILING(AVG(CAST(REPLACE(SALARY,'0','')AS INT))) +1 FROM EMPLOYEES;

我不知道为什么需要最后的“+1”来获得正确答案。

无需将其转换为字符串以使用replace

MySQL解决方案

SELECT CEIL(AVG(SALARY)-AVG(REPLACE(SALARY,"0",""))) FROM EMPLOYEES ; 

以下是使用MySQL解决Hackerrank问题的答案:

SELECT round(avg(salary),0)-round(avg(replace(salary,'0','')),0) from EMPLOYEES;
您可以使用:

replace(Column_Name,'0','')
上述给定查询将从给定整数类型输入中删除0

select 
    avg(salary) - avg(convert(integer, replace(salary,'0', ''))) + 1 
from employees

这是答案

这是删除任何数字中的0的答案

replace('0349010330', '0', '') 

但我有整数,而不是Varchar。所以如果我有3021和450,我想这样做:获得321和45(去掉零),用新的数字做一些运算,比如调用平均值函数。。。也许将int转换为varchar,然后调用replace函数删除零,然后将varchar重新转换为int可能会起作用。但我一直在寻找更干净的东西。在你的例子中,
0349010330
不是一个数字。只需使用
将字符(
将数字转换为string@ArLi91…(1)在您的问题中使用前导零表明表示形式实际上是字符串。(2)它无论如何都可以工作,因为
REPLACE()
将第一个参数转换为字符串(尽管您可能希望转换回数字)。正如Gordon所说,oracle有一些隐式转换。请检查示例中的前导零,这是我的错误。我想删除数字中的零,就像您所说的sql中没有前导零。欢迎使用堆栈溢出!您能为您的答案添加一些详细信息吗?可能还包括一些代码?Plzz不需要对他严苛一点!这只适用于Oracle。MySQL不支持同样的问题。我们将两个平均值之差加上0.5的原因是这个问题要求我们将其四舍五入到下一个整数。欢迎使用堆栈溢出!虽然这个代码片段可能解决了这个问题,但它没有解释为什么或者如何回答这个问题。请at确实有助于提高您文章的质量。请记住,您是在为将来的读者回答问题,这些人可能不知道您的代码建议的原因。请格式化您的代码,并说明它与其他答案的不同之处。请格式化您的代码,如果您能解释一下,那将非常好
replace(Column_Name,'0','')
select 
    avg(salary) - avg(convert(integer, replace(salary,'0', ''))) + 1 
from employees
replace('0349010330', '0', '')