SQL अद्यतन क्षेत्र में सभी मानों के साथ संलग्न स्ट्रिंग काम नहीं कर रहा है


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      |  
+----+-------------+  

बस! मुझे बस इसे एक ही क्वेरी में करने की आवश्यकता है, लेकिन एक रास्ता खोजने के लिए प्रतीत नहीं हो सकता है। मैं mySQL का उपयोग Bluehost पर कर रहा हूं (मुझे लगता है कि इसका संस्करण 4.1 है)

सबको धन्यवाद।


5
क्या आपने वास्तव में अपनी क्वेरी की कोशिश की है? इसे "बस काम करना चाहिए"
फिल

हां मैंने कोशिश की है। मुझे लगा कि बस काम करना चाहिए।
22

यहाँ मेरी 'वास्तविक जीवन' वापसी है: [SQL] UPDATE सवाल_national SET cat_id = CONCAT (cat_id, 'a) प्रभावित पंक्तियाँ: 0 समय: 0.069ms
Fresheyeball

है cat_idएक चरित्र क्षेत्र (varchar, पाठ, आदि) या संख्यात्मक?
फिल

मेरे लिए काम नहीं कर रहा था (एसक्यूएल 2012) इसलिए मैंने "अपडेट टी सेट डेटा = डेटा + 'ए'" ठीक काम करता है .. की कोशिश की
रजत

जवाबों:


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/...
फिल

12
उसे हल कर लिया। कॉलम से पता चलता है कि पात्रों का एक सीमित सेट था जिसे वे स्वीकार करेंगे, इसे बदल दिया और अब क्वेरी ठीक काम करती है।
Fresheyeball

मेरे पास कुछ समान सिनारियो हैं, सिवाय इसके कि मैं सभी दोहरे उद्धरण चिह्नों को सिंगल कोट्स से बदलना चाहता हूं। किसी भी सुझाव मैं ऐसा कैसे कर सकते हैं?
शॉनलाइन

यह एक अच्छा जवाब था, लेकिन थोड़ा भ्रमित करने वाला था, क्योंकि मेरे सर्वर पर 'डेटा' एक कीवर्ड था। शायद एक कम अस्पष्ट उदाहरण होगा:UPDATE table SET column_name=concat(column_name, 'string');
किकी रोड्रिगेज 19

38

एक शून्य मान के साथ CONCAT शून्य देता है, इसलिए सबसे आसान उपाय है:

अद्यतन माईटेबल सेट पुर्जों = IFNULL (CONCAT (पुर्जों, "स्ट्रिंग"), "स्ट्रिंग")


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

मेरे लिए काम नहीं कर रहा।

पुर्जों NULLडिफ़ॉल्ट रूप से है, लेकिन इसकेvarchar


5
ऐसा लगता है, कि यदि मान डिफ़ॉल्ट रूप से NULL है तो यह काम नहीं करता है। इसे खाली स्ट्रिंग होना चाहिए
DS_web_developer

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 लाइन प्रभावित"।

समाधान था:

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

फ़ील्ड = फ़ील्ड + मान काम नहीं करता है जब फ़ील्ड शून्य है।


क्या आप वास्तव में mysql में तार के साथ + का उपयोग कर सकते हैं?
सुधीर एन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.