मेरे पास नीचे की तरह एक कॉलम है। संख्याओं के अंतिम दो सेट दिनांक और समय हैं। मैं कॉलम से मान निकालकर दिनांक-समय कॉलम बनाना चाहता हूं।

1002206391240385-प्रायोजित उत्पाद-SameDayPull-20190627-012313.json

तारीख निकालने से शुरू हुआ लेकिन यह वह नहीं देता जो मुझे चाहिए

Select regexp_substr('1002206391240385-sponsoredProducts-SameDayPull-20190627-012313.json','-[\\d{8}]-')
0
Fisseha Berhane 17 अगस्त 2019, 00:12

2 जवाब

सबसे बढ़िया उत्तर

यह सबस्ट्रिंग आपकी स्ट्रिंग से दिनांक समय भाग निकालता है।

SELECT substring(col_name,regexp_instr(col_name,'-',1,regexp_count(col_name,'-')-1)+1,
                 regexp_instr(col_name,'.json',1)-regexp_instr(col_name,'-',1,regexp_count(col_name,'-')-1)-1)

regexp_count काउंट्स में स्ट्रिंग में कई हाइफ़न होते हैं

regexp_instr हाइफ़न की स्थिति बताता है

substring स्ट्रिंग में सेकंड से लास्ट हाइफ़न से शुरू होकर .json तक रिटर्न देता है

परीक्षण करने के लिए मैंने उपयोग किया है

WITH test(col_name) AS (
SELECT '1002206391240385-sponsoredProducts-SameDayPull-20190627-012313.json'::TEXT
)
SELECT col_name,
substring(col_name,regexp_instr(col_name,'-',1,regexp_count(col_name,'-')-1)+1,
                  regexp_instr(col_name,'.json',1)-regexp_instr(col_name,'-',1,regexp_count(col_name,'-')-1)-1) datetime
FROM test

आउटपुट है

col_name                                                            datetime
1002206391240385-sponsoredProducts-SameDayPull-20190627-012313.json 20190627-012313

1
demircioglu 17 अगस्त 2019, 02:25

एक विकल्प के रूप में, और यदि फ़ाइल नाम प्रारूप सुसंगत है, तो आप एक गैर-रेगेक्स समाधान का उपयोग कर सकते हैं उदा। फ़ाइल नाम स्ट्रिंग का वह भाग निकालें जिसमें दिनांक है और फिर TO_TIMESTAMP< का उपयोग करें /a> दिनांक निकालने के लिए स्वरूप स्ट्रिंग के साथ और समय:

SELECT TO_TIMESTAMP(RIGHT('1002206391240385-sponsoredProducts-SameDayPull-20190627-012313.json', 20), 'YYYYMMDD-HH24MISS.json')  AS extracted_datetime

जो लौटता है

extracted_datetime    |
----------------------|
2019-06-27 01:23:13+00|
0
Nathan Griffiths 22 अगस्त 2019, 01:30