2012-01-18 4 views
0

문제 설명 :SQL NESTED 잘못된 데이터 정리에 대한 쿼리

SQL 테이블의 열에서 데이터를 읽고 해당 값을 정리합니다. 그것은해야 본질적으로 단지 '숫자'길이 9 의 그것은 현재 VARCHAR (11)이며 같은 값을 보유하고 있습니다 A : 123456789, 1-2 : 3456789, 123456789H, A-123456789 등

어떻게 할 수 테이블의 다른 값에 대해 여러 검사를 추가하고 잘못된 값을 바꾸고 테이블을 업데이트합니다. 포함 된 값이 있다면 내가 확인하기 위해 검색 기능을 바로 잡고 시도

: -

SELECT budget, descp 
FROM yearlybudget 
WHERE CONTAINS(budget, '":" OR "-"); 

SELECT budget, descp 
FROM yearlybudget 
WHERE CONTAINS(budget, '":" AND "-"); 

UPDATE dbo.yearlybudget 
SET budget = replace(budget, '":"', '""') 
WHERE CONTAINS(budget, '":"); 

위는 3 가지 SQL 문입니다. "OR"및 "AND"조건을 병합 할 수 있습니까? 또한 모든 조건을 확인하기 위해 바꾸기를 어떻게 추가 할 수 있습니까?

각 조건에 대해 개별적으로 수행하는 것이 가장 좋습니까?

알려 주시기 바랍니다. 감사합니다.

+0

그런데 이것들은 중첩 된 쿼리가 아닙니다. 중첩 된 쿼리는'SELECT name FROM employees where salary = (SELECT MAX (salary) FROM employees);'다른 쿼리의 내부에 쿼리 ('SELECT MAX (salary) FROM employees')가있는 경우입니다. . –

답변

1

먼저 이러한 쿼리는 사용자가 생각하는대로 수행하지 않습니다. 가장 큰 문제는 두 개의 작은 따옴표가 문자열과 함께 있다는 것입니다. 첫 번째 두 개의 쿼리는 실제로 문자열 ":" OR "-"); SELECT budget, descp FROM YearlyBudget WHERE CONTAINS(budget,이 있는지 확인합니다.

둘째로, 포함에서 ":" OR "-"을 수행하면 두 문자열을 모두 확인하지 않습니다. 오히려 문자열은 숫자로 평가 된 다음 이진 OR과 결합됩니다. 특히 0으로 평가 한 다음 0 또는 0으로하면 0이되므로 CONTAINS (예산, 0)를 확인하고있는 것입니다.

셋째, 대체품이 :이 아니라 ":"으로 대체됩니다. 따라서, :는 문자를 큰 따옴표로 묶지 않는 한 대치하지 않습니다.

네 번째로, 인터넷 검색에서 MySQL에 "CONTAINS"키워드가 없음을 나타냅니다.

은 아마 당신은 원하는 쿼리는 더 다음과 같습니다

UPDATE dbo.yearlybudget 
SET budget = REPLACE(REPLACE(budget,'-',''), ':', '') 
WHERE budget LIKE '%:%' OR budget LIKE '%-%'; 
유사한 문자열의 %는 "여기에 어떤 문자와 일치"를 의미하므로 포함 된 다른 데이터베이스에 수행 같은 일을하고 바람이

관리 시스템. 따라서이 쿼리는 원하는 모든 것 인 all - and : 문자를 제거하여 budget 열을 업데이트합니다. 당신이 다른 것을하고 싶다면 아마도 무엇을 말해야만합니다. 예를 들어 : 또는 -을 사용하지 않고 예산 항목을 가져 오려면 다른 검색어를 사용해야합니다. 실제로는 다른 검색어를 사용해야합니다. 실제로는 데이터베이스의 데이터가 변경되기 때문입니다. 이를 실행하기 전에 예산 항목에서 삭제하려는 항목이 있는지 확인하십시오. 그러면 예산 항목이 음수로 바뀔 가능성이 있으므로 문제가 될 수 있습니다.

OR과 AND를 결합 할 수 있는지 여부에 대한 원래 질문에 대한 대답은 아마 그럴 것이지만, 사용자가하려는 작업에 따라 다릅니다. OR은 배타적이지 않으므로 A = 1 또는 B = 1 인 경우 A = 1 또는 B = 1이 true가됩니다.

+0

감사합니다. 나는 그것을 깨닫지 못했다. 그럼 대체 점검을해야합니까?하지만 올바른 교체 확인을 수행 할 수있는 값이 있는지 확인해야합니다. 내가 어떻게 병합 할 수 있을까 ?? – JJunior

+0

대체 검사로 무슨 뜻인지 모르겠습니다. UPDATE 문은 WHERE 절을 사용하여 : 및/또는 - 예산 속성에서 다음과 같이 SET 절에 따라 : 및 - 각각을 아무 것도 (따라서 제거하지 않음)로 대체합니다. 그게 네가하고 싶은 것이면 그게 네가 필요한거야. 다른 진술은 필요하지 않습니다. SELECT 문은 데이터를 사용자에게 반환하지만 UPDATE 문을 수행 할 필요는 없습니다. 서로 다른 SQL 문은 서로 연결되지 않은 후에 하나씩 실행됩니다. –