Sql 从数字中删除零
如何从包含整数(数字)的列中删除零(不仅仅是前导零,而是每个位置的零)? 例如:0349010330应该变成349133 提前谢谢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',''))
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', '')