2010-11-30 21 views
7

मेरे पास एक सारणी है जिसमें अन्य लोगों के बीच दिनांक कॉलम servdate है।सप्ताह के दिन प्रारूप दिनांक

मैं निम्न क्वेरी का उपयोग (एक सप्ताह सोमवार से शुरू होता है) पिछले सप्ताह के भीतर से मुझे सभी नौकरियों को पाने के लिए:

SELECT * FROM tb1 WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

मैं क्वेरी बिल्कुल वैसा ही काम करना चाहते हैं, लेकिन इसके बजाय servdate क्षेत्रों वापस जाने के लिए सप्ताह के उनके इसी दिन के रूप में। उदाहरण के लिए, "सोमवार", "2010-11-28" के बजाय।

क्या यह संभव है?

+1

वैलीक का विचार अच्छा है लेकिन सादगी के लिए मैं "0" "1" – brux

उत्तर

18

आप वैलीक सुझाव के रूप में एक सहायक तालिका का उपयोग कर सकते हैं;

select _id, busnum, 
    case cast (strftime('%w', servdate) as integer) 
    when 0 then 'Sunday' 
    when 1 then 'Monday' 
    when 2 then 'Tuesday' 
    when 3 then 'Wednesday' 
    when 4 then 'Thursday' 
    when 5 then 'Friday' 
    else 'Saturday' end as servdayofweek 
from tb1 
where ... 
+0

अच्छा परिशिष्ट। मुझे दस्तावेज़ में 'केस' का समर्थन नहीं मिला, लेकिन मैंने इसे फ़ायरफ़ॉक्स में आज़माया और यह ठीक काम करता है:' विज़िट_डेट, केस कास्ट (स्ट्रेटटाइम ('% डब्ल्यू', विज़िट_डेट/1000000) पूर्णांक के रूप में चुनें) जब 0 'सूर्य' जब 1 फिर 'मोन' जब 2 तब 'ट्यू' जब 3 तब 'wed' जब 4 तब 'thu' जब 5 तब 'fri' जब 6 तब 'बैठे' और '???' visitdayofweek से moz_historyvisits LIMIT 50' – wallyk

+0

धन्यवाद यह काम करता है – brux

+1

केस अभिव्यक्ति http://www.sqlite.org/lang_expr.html –

-1
SELECT _id, busnum, date_format(servdate, '%a') as servdayofweek 
FROM tb1 
WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

% ए सप्ताह का संक्षिप्त दिन है। स्वरूपित करने के अन्य तरीकों के लिए documentation देखें।


संपादित करें:

ऊप्स! स्क्लाइट टैग को नजरअंदाज कर दिया। उपरोक्त MySQL के लिए है। SQLite (documentation) के लिए:

SELECT _id, busnum, strftime('%w', servdate) as servdayofweek 
FROM tb1 
WHERE servdate BETWEEN date('now', 'Weekday 1', '-21 days') AND date('now') 

इस छोड़कर 6. के माध्यम से एक मूल्य के 0 के रूप में सप्ताह के दिन देता है हो सकता है कि काफी अच्छा है?

+1

हैलो के बजाय "सूरज" "मोन" पसंद करूंगा, मैंने क्वेरी चलाई और प्राप्त किया: SQL त्रुटि: ऐसा कोई फ़ंक्शन नहीं : date_format – brux

+0

क्या यह कोड "1" आदि के बजाय "mon" लौटने के लिए अनुकूलित किया जा सकता है? : डी – brux

+0

अब तक, मुझे इसे करने का सीधा तरीका नहीं मिला है। यदि आप एक और टेबल जोड़ सकते हैं, तो यह मामूली है। – wallyk

0

यहाँ एक सुझाव CASE ... WHEN ब्लॉक से भी कम समय टाइपिंग शामिल: या आप एक case अभिव्यक्ति का उपयोग कर सकते हैं। यहां, यह निष्कर्षण निकालने के द्वारा किया जाता है:

select substr('SunMonTueWedThuFriSat', 1 + 3*strftime('%w', timestr), 3) as dow 
from ... 

यह पूरे सप्ताह के नामों के बजाय केवल निश्चित लंबाई संक्षेप पैदा करता है। (लेकिन कभी-कभी यह पर्याप्त है।)

संबंधित मुद्दे