문자열 CONCAT가 추가되지 않은 필드의 SQL UPDATE 모든 값이 작동하지 않습니다


159

내가하고 싶은 일은 다음과 같습니다.

현재 테이블 :

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | max         |  
|  2 | linda       |  
|  3 | sam         |  
|  4 | henry       |  
+----+-------------+  

미스터리 쿼리 (같은 "UPDATE table SET data = CONCAT(data, 'a')")

결과 테이블 :

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | maxa        |  
|  2 | lindaa      |  
|  3 | sama        |  
|  4 | henrya      |  
+----+-------------+  

그게 다야! 하나의 쿼리로 수행해야하지만 방법을 찾지 못하는 것 같습니다. bluehost에서 mySQL을 사용하고 있습니다 (버전 4.1이라고 생각합니다)

모두 감사합니다.


5
실제로 검색어를 사용해 보셨습니까? "
Phil

예, 시도했습니다. 나는 그것이 작동해야한다고 생각했다.
Fresheyeball

여기 내 '실제'반환입니다 : [SQL] UPDATE questions_national SET cat_id = CONCAT (cat_id, 'a') 영향을받는 행 : 0 시간 : 0.069ms
Fresheyeball

cat_id문자 필드 (VARCHAR, 텍스트 등) 또는 숫자는?
Phil

나를 위해 작동하지 않았기 때문에 (SQL 2012) "update t set data = data + 'a'"시도 잘 작동했습니다 ..
Silver

답변:


257

그것은 당신이 필요로하는 거의 전부입니다.

mysql> select * from t;
+------+-------+
| id   | data  |
+------+-------+
|    1 | max   |
|    2 | linda |
|    3 | sam   |
|    4 | henry |
+------+-------+
4 rows in set (0.02 sec)

mysql> update t set data=concat(data, 'a');
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from t;
+------+--------+
| id   | data   |
+------+--------+
|    1 | maxa   |
|    2 | lindaa |
|    3 | sama   |
|    4 | henrya |
+------+--------+
4 rows in set (0.00 sec)

5.1.41에서 이것을 테스트하고 있지만 왜 문제가 발생했는지 잘 모르겠습니다.


1
concat4.1 의 기능은 똑같습니다 -dev.mysql.com/doc/refman/4.1/en/…
Phil

12
해결했습니다. 열에 허용되는 문자 세트가 제한되어 있고 열이 바뀌면 쿼리가 제대로 작동합니다.
Fresheyeball

모든 큰 따옴표를 작은 따옴표로 바꾸려는 것을 제외하고는 다소 동일한 시나리오가 있습니다. 어떻게 할 수 있습니까?
Shaonline

내 대답은 서버에서 '데이터'가 키워드이기 때문에 좋은 대답이지만 약간 혼란 스럽습니다. 어쩌면 덜 모호한 예는 다음과 같습니다.UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

널값을 갖는 CONCAT는 널을 리턴하므로 가장 쉬운 해결책은 다음과 같습니다.

UPDATE myTable SET spares = IFNULL (CONCAT (spares, "string"), "string")


11
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

나를 위해 일하지 않습니다.

여분은 NULL기본적으로 있지만varchar


5
기본적으로 값이 NULL이면 작동하지 않는 것 같습니다. 빈 문자열
이어야

9

NULL빈 문자열로 값을 감싸서 변환하십시오 .COALESCE

"UPDATE table SET data = CONCAT(COALESCE(`data`,''), 'a')"

또는

대신 CONCAT_WS 를 사용하십시오 .

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"

8

해결했습니다. 열에 허용되는 문자 세트가 제한되어 있고 열이 바뀌면 쿼리가 제대로 작동합니다.


8
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

해결하지 못했습니다. 요청 구문이 정확했지만 실행시 "0 line 영향을 받았습니다".

해결책은 다음과 같습니다.

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )

저것은 효과가 있었다.


2

당신은 이것을 할 수 있습니다 :

Update myTable
SET spares = (SELECT CASE WHEN spares IS NULL THEN '' ELSE spares END AS spares WHERE id = 1) + 'some text'
WHERE id = 1

field가 null이면 field = field + value가 작동하지 않습니다.


mysql에서 문자열과 함께 +를 실제로 사용할 수 있습니까?
Sudhir N
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.