Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql दिनांक को चालू वर्ष की समान तिथि में बदलें

खालिद का जवाब ज्यादातर समय सही होता है। लीप ईयर गड़बड़ कर देता है चीजें! यदि आप प्रस्तावित क्वेरी चलाते हैं जहां डेटकॉल का मान '2016-02-29' है और CURRENT_DATE '2017-01-01' है, उदाहरण के लिए, आपको null मिलता है .

ऐसा करने का एक वैकल्पिक तरीका जो लीप वर्ष को अधिक सुंदर ढंग से संभालता है वह इस प्रकार है:

SELECT DATE_FORMAT(
    MAKEDATE(YEAR(CURRENT_DATE()), DAYOFYEAR(datecol)),
    '%Y-%m-%d'
) `date`
FROM t

date . का मान यहां 2017-03-01 होगा।

संपादित करें/स्पष्टीकरण:समस्या यह है कि '2016-02-29' के वर्ष को 2017 में बदलने से, उदाहरण के लिए, '2017-02-29' उत्पन्न होता है, जो एक मान्य तिथि नहीं है। फिर, DATE_FORMAT('2017-02-29', '%Y-%m-%d') चलाने से null परिणाम मिलता है . समस्या का एक डेमो यहां है:

http://sqlfiddle.com/#!9/c5358/11

हालांकि, मेरे उत्तर की समीक्षा करने के बाद मुझे एहसास हुआ कि 28 फरवरी के बाद लीप वर्ष पर किसी भी तारीख के बाद से MAKEDATE का उपयोग करके मुझे एक और समस्या 365 दिनों के साथ "सामान्य" वर्ष के लिए दिन + 1 है। उदाहरण के लिए, यदि datecol ='2016-03-01' और चालू वर्ष 2017 थे तो परिवर्तित तिथि '2017-03-02' होगी, न कि '2017-03-01' इच्छानुसार। एक बेहतर तरीका इस प्रकार है:

SELECT
DATE_FORMAT(DATE_ADD(datecol, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(datecol)) YEAR), '%Y-%m-%d') `date`
FROM t;

यह विधि किसी भी 29 फरवरी को 28 तारीख में बदल देती है, और अन्यथा अन्य सभी तिथियों को ठीक वैसे ही रखती है जैसे आप उनसे अपेक्षा करते हैं। समाधान का एक डेमो यहां है:

http://sqlfiddle.com/#!9/c5358/12



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql में ओवरलैप्स की गिनती के बिना तारीखों का सारांश रेंज

  2. MySQL पासवर्ड समस्याएँ (मैक ओएस एक्स लायन)

  3. mysql (5.1)> एक चर से नाम के साथ तालिका बनाएं

  4. डुप्लिकेट पंक्तियों को mysql में अद्वितीय मानों में कैसे बदलें?

  5. रिकॉर्ड का चयन तभी करें जब उसके पहले वाले का मान कम हो