从数字中删除零

ArL*_*i91 5 sql oracle

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

提前致谢

Omk*_*ngh 23

这是 Hackerrank 挑战The Blunder 的解决方案 (MySQL)

SELECT CEIL((AVG(salary)) - (AVG(REPLACE(salary, '0', '')))) AS avg_salary FROM employees;
Run Code Online (Sandbox Code Playgroud)
  • REPLACE() :用于从工资中删除 0。
  • AVG() :用于计算平均工资。
  • CEIL() :用于获取下一个四舍五入的整数。


Jua*_*eza 14

  REPLACE('0349010330', '0', '');
Run Code Online (Sandbox Code Playgroud)

这也有用

  REPLACE('0349010330', '0');
Run Code Online (Sandbox Code Playgroud)

  • @ ArLi91...(1)在你的问题中使用前导零表示表示实际上是字符串.(2)无论如何它都会工作,因为`REPLACE()`会将第一个参数转换为字符串(尽管你可能希望转换回一个数字). (4认同)

sha*_*kar 5

甲骨文/ PLSQL

SELECT TO_NUMBER(REPLACE(TO_CHAR(0349010330),'0','')) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

的MySQL

SELECT CONVERT(REPLACE(STR(0349010330),'0',''),INTEGER) FROM DUAL;
Run Code Online (Sandbox Code Playgroud)


San*_*sad 5

HackerRank 问题链接

解决方案在这里->

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


hrs*_*shd 5

SQL Server 的HakerRank解决方案

SELECT CEILING(AVG(SALARY))- CEILING(AVG(CAST(REPLACE(SALARY,'0','')AS INT))) +1 FROM EMPLOYEES;
Run Code Online (Sandbox Code Playgroud)

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

  • 需要+1,因为平均值通常需要考虑小数点。更好的解决方案是将 avg 计算为 float,然后将其转换回 int 以获得最终差异。 (3认同)

Sha*_*sad 5

无需将其转换为字符串即可使用替换

MySQL解决方案

SELECT CEIL(AVG(SALARY)-AVG(REPLACE(SALARY,"0",""))) FROM EMPLOYEES ; 
Run Code Online (Sandbox Code Playgroud)