कैसे साइक्लाइट में पैडिंग के साथ तारों को समतल करना है


213

मेरे पास एक sqlite तालिका में तीन कॉलम हैं:

    Column1    Column2    Column3
    A          1          1
    A          1          2
    A          12         2
    C          13         2
    B          11         2

मुझे चयन करने की आवश्यकता है Column1-Column2-Column3(जैसे A-01-0001)। मैं प्रत्येक कॉलम को एक के साथ पैड करना चाहता हूं-

मैं SQLite के संबंध में एक शुरुआत हूं, किसी भी मदद की सराहना की जाएगी


संभावित डुप्लिकेट: stackoverflow.com/q/3568779/2291
जॉन एडम्स

जवाबों:


382

||ऑपरेटर "CONCATENATE" है - यह एक साथ जुड़ इसके ऑपरेंड के दो तार।

से http://www.sqlite.org/lang_expr.html

पैडिंग के लिए, मैंने जिस प्रतीत-चीटर का उपयोग किया है वह आपके लक्ष्य स्ट्रिंग के साथ शुरू करना है, '0000', '0000423' को सम्‍मिलित करें, फिर '0423' के लिए पदार्थ (परिणाम, -4, 4)।

अद्यतन: ऐसा लगता है कि SQLite में "lpad" या "rpad" का कोई मूल कार्यान्वयन नहीं है, लेकिन आप यहाँ (मूल रूप से मैंने जो प्रस्तावित किया है) का अनुसरण कर सकते हैं: http://verysimple.com/2010/01/12/sqlite-lpad -rpad-समारोह /

-- the statement below is almost the same as
-- select lpad(mycolumn,'0',10) from mytable

select substr('0000000000' || mycolumn, -10, 10) from mytable

-- the statement below is almost the same as
-- select rpad(mycolumn,'0',10) from mytable

select substr(mycolumn || '0000000000', 1, 10) from mytable

यहाँ है कि यह कैसा दिखता है:

SELECT col1 || '-' || substr('00'||col2, -2, 2) || '-' || substr('0000'||col3, -4, 4)

यह पैदावार देता है

"A-01-0001"
"A-01-0002"
"A-12-0002"
"C-13-0002"
"B-11-0002"

9
@ और - सामान्य रूप से कोई भी स्केलर ऑपरेशन जिसमें NULL शामिल है, NULL निकलेगा। आपकी आवश्यकताओं का उपयोग करके पूरा किया जा सकता है COALESCE(nullable_field, '') || COALESCE(another_nullable_field, '')
MatBailie

37

SQLite में एक printfफ़ंक्शन होता है जो बिल्कुल ऐसा करता है:

SELECT printf('%s-%.2d-%.4d', col1, col2, col3) FROM mytable

1
क्वेरी त्रुटि: ऐसा कोई फ़ंक्शन नहीं: प्रिंटफ़ कथन से निष्पादित करने में असमर्थ प्रिंट करने योग्य चयन ('% s।% S', आईडी, यूआरएल) से mytable की सीमा 7. मेरा संस्करण 3.8.2 2014-12-06 है। आप कौन सा संस्करण उपयोग कर रहे हैं?
बेरी त्सकाला

5
@BerryTsakala: 3.8.6
याकॉव

1
3.8.3 "और प्रिंटफ़ () SQL फ़ंक्शन के अलावा अन्य छोटी वृद्धिएं भी हैं।"
सैंडबर्ग

17

@Tofutim उत्तर के लिए बस एक और पंक्ति ... यदि आप संक्षिप्त पंक्ति के लिए कस्टम फ़ील्ड नाम चाहते हैं ...

SELECT 
  (
    col1 || '-' || SUBSTR('00' || col2, -2, 2) | '-' || SUBSTR('0000' || col3, -4, 4)
  ) AS my_column 
FROM
  mytable;

SQLite 3.8.8.3 पर परीक्षण किया गया , धन्यवाद!

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