2009-12-07 14 views
10

मैं एक अद्यतन बयान अपडेट कर देता क्षेत्रों एक्स, वाई और जेड जहां आईडी = xx है।अद्यतन फील्ड जब अशक्त नहीं

तालिका में मैं (रिकॉर्ड के विभिन्न भागों है कि बनाए रखा जाता है/विभिन्न लोगों द्वारा दर्ज के लिए) कुछ अलग x_created_datetime क्षेत्रों की है। मैं एक ही प्रश्न लिखना चाहता हूं जो शून्य होने पर इस फ़ील्ड को अपडेट करेगा, लेकिन शून्य नहीं होने पर इसे अकेला छोड़ दें।

तो क्या मैं है:

UPDATE newspapers 
SET scan_notes = "data", 
    scan_entered_by = "some_name", 
    scan_modified_date = "current_unix_timestamp" 
WHERE id = X 

क्या मैं जरूरत निम्नलिखित में जोड़ने के लिए एक रास्ता है, लेकिन अभी भी हमेशा अद्यतन ऊपर:

scan_created_date = "current_unix_timestamp" 
where scan_created_date is null 

मैं आशा करती हूं कि मैं क्या कर सकते हैं यह डीबी को दूसरे लेनदेन के बिना। इसे पूरा करने के तरीके पर कोई विचार?

उत्तर

28

यह करें:

UPDATE newspapers 
SET scan_notes = "data",  
    scan_entered_by = "some_name",  
    scan_modified_date = "current_unix_timestamp", 
    scan_created_date = COALESCE(scan_created_date, "current_unix_timestamp") 
WHERE id = X 

COALESCE समारोह पहली गैर शून्य मान लेती है। इस मामले में, यह डेटस्टैम्प scan_created_date अद्यतन एक ही मूल्य होने के लिए अगर यह मौजूद है, वरना यह जो कुछ भी आप के साथ "current_unix_timestamp" की जगह ले जाएगा।

+3

यह कारण है कि इस काम करता है की एक संक्षिप्त व्याख्या के लायक है का उपयोग करते हुए एक तैयार बयान में नीचे की तरह उपयोग कर सकते हैं: सम्मिलित रिटर्न मूल्यों की अपनी सूची में पहली गैर शून्य मान, इसलिए यदि scan_created_date पहले से ही वहाँ है , यह खुद को उस मूल्य पर सेट कर देगा जो पहले से मौजूद है। यदि यह शून्य है, तो यह खुद को वर्तमान टाइमस्टैंप पर सेट कर देगा। –

+0

क्या यह शून्य होने पर scan_created_date को अपडेट नहीं करेगा? ऐसा लगता है कि वह इसे अपडेट करना चाहता है जहां यह शून्य नहीं है। – tloach

+0

@tloach - स्पष्टीकरण देखें। @JacobM - यह पहले से ही कर रहा था :) – cjk

1

आप COALESCE() जो पहले गैर-शून्य मान देता है) इस्तेमाल कर सकते हैं:

scan_created_date = COALESCE(scan_created_date, "current_unix_timestamp") 
4

मुझे लगता है कि क्या आप देख रहे हैं IF()

UPDATE newspapers 
SET scan_notes = "data", 
    scan_entered_by = "some_name", 
    scan_modified_date = "current_unix_timestamp", 
    scan_created_date = IF(scan_created_date IS NOT NULL, "current_unix_timestamp", NULL) 
WHERE id = X 
3

mySQL है एक IFNULL कार्य है है, तो आप कर सकता है:

UPDATE newspapers 
SET scan_notes = "data", 
    scan_entered_by = "some_name", 
    scan_modified_date = "current_unix_timestamp" 
    scan_created_date = IFNULL(scan_created_date, "current_unix_timestamp") 
WHERE id = X 
1

आप कुछ इस तरह कर सकते हैं:

UPDATE newspapers a, newspapers b 
SET a.scan_notes = "data",  
    a.scan_entered_by = "some_name",  
    a.scan_modified_date = "current_unix_timestamp", 
    b.scan_created_date = "current_unix_timestamp" 
WHERE a.id = X AND b.id = X AND b.scan_created_date is not NULL 
0

यह ओरेकल के एनवीएल के बराबर है। आप मापदंडों

UPDATE 
    tbl_cccustomerinfo 
SET 
    customerAddress = COALESCE(?,customerAddress), 
    customerName = COALESCE(?,customerName), 
    description = COALESCE(?,description) 
WHERE 
    contactNumber=? 
संबंधित मुद्दे