programing

숫자에서 0을 제거하는 중

bestprogram 2023. 4. 22. 10:56

숫자에서 0을 제거하는 중

정수(숫자)가 포함된 열에서 0(선행 0뿐만 아니라 모든 위치의 0)을 제거하려면 어떻게 해야 합니까?

예를 들어 0349010330은 349133이 됩니다.

다음은 Hackerlank 과제 The Block을 위한 솔루션(MySQL)입니다.

SELECT CEIL((AVG(salary)) - (AVG(REPLACE(salary, '0', '')))) AS avg_salary FROM employees;
  • REPLACE() : 급여에서 0을(를) 제거하기 위해 사용됩니다.
  • AVG() : 평균 급여 계산에 사용됩니다.
  • CAILLE() : 반올림된 다음 정수를 가져오는 데 사용됩니다.
  REPLACE('0349010330', '0', '');

이것 또한 효과가 있다

  REPLACE('0349010330', '0');

치환을 사용하기 위해 문자열로 변환할 필요가 없습니다.

MySQL 솔루션

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

Oracle/PLSQL

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

MySQL

SELECT CONVERT(REPLACE(STR(0349010330),'0',''),INTEGER) FROM DUAL;

HackerRank 문제 링크

솔루션 여기 ->

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

SQL Server용 HakerRank 솔루션

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

왜 마지막에 '+1'이 있어야 정답이 나오는지 모르겠어요.

MYSQL:

치환('0349010330', '0', '')

그러면 문자열 내의 모든 OS가 빈 문자열로 바뀝니다.

사용방법: TO_NUMBER(REPLACE('0349010330',0))

HackerRank Mysql 솔루션 https://www.hackerrank.com/challenges/the-blunder/problem

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

https://www.hackerrank.com/challenges/the-blunder/problem

Mysql의 경우 아래 쿼리를 실행하십시오.

select ceil(Avg(Salary) - Avg(CAST(Replace(CAST(Salary as char(1000)),'0','') as unsigned))) from EMPLOYEES

여기 답이 있습니다.

치환(syslog,0)

이와 유사한 질문이 해커랭크에서 발견되었습니다.실수 문제

종업원으로부터 ceil(avg(avg)-avg(replace(avg,0))를 선택한다.

은 은 필요 합니다.to_number( replace( to_char(x), '0', '' ) ) 입력하시면 .

replace(x, '0')

그리고 주물은 자동으로 적용됩니다.을 공백으로 .replace(x, '0', '')이 되다replace()대체 값을 지정하지 않으면 기본적으로 첫 번째 값이 삭제됩니다.

Oracle에서 REPLACE를 사용할 수 있지만 REPLACE는 CHAR 결과를 반환하므로 결과를 숫자로 변환해야 합니다.

select to_number(replace(1001,0,'')) from dual

다음은 MySQL for Hackerlank 문제에 대한 답변입니다.

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', '') 

MS SQL에서는 @hrshd가 언급한 바와 같이 다음과 같이 답변했습니다.

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

위의 +1 추가 문제는 두 값이 동일한 데이터 유형일 경우 발생하지 않습니다.가능한 해결책은 다음과 같습니다.

select ceiling( avg(cast(Salary as real)) - 
avg(cast(replace(Salary,0,'') as real)) )
from EMPLOYEES;

MS SQL에서는 첫 번째 질문에 대답할 때 다음과 같습니다.

  1. Replace() 함수를 사용하여 문자열 치환 작업을 수행합니다.
  2. 필요에 따라서, i.e.int, real 등에 송신합니다.

cast( replace(a_number,0,'') as real )

HackerRank 솔루션 https://www.hackerrank.com/challenges/the-blunder/problem

SQL Server에서

SELECT CAST(CEILING (AVG(CAST(SALARY AS float)) - AVG(CAST(REPLACE(salary, '0', '')AS float) ) ) as int) FROM EMPLOYEES;

여기서 실제 평균 급여는 4046.75이고 평균 급여는 1794.5로 잘못 계산되어 있기 때문에 2252.25의 차이는 반올림했을 때 2253.0이지만 해커랭크 솔루션에서는 int로 예상하기 때문에 다시 int로 되돌릴 필요가 있습니다.

언급URL : https://stackoverflow.com/questions/35613341/removing-zeros-from-number