2012-06-08 17 views
6

मैं एक मेज datas नामित और मैं इस तरह एक प्रश्न को क्रियान्वित कर रहा हूँ है:SQL क्वेरी के परिणामस्वरूप फ़ाइल का फ़ाइल एक्सटेंशन कैसे प्राप्त करें?

SELECT linkurl AS DOWNLOADURL, 
     lastrevlevel AS VERSION, 
     code AS DESCRIPTION, 
     created AS RELEASEDATE, 
     name AS TYPE 
FROM datas 
WHERE id IN (SELECT child_id 
      FROM datas _datas 
      WHERE parent_id = (SELECT Max(id) 
           FROM datas 
           WHERE code = 'AN4307SW')) 

यह इस तरह परिणाम देता है:

DOWNLOADURL    VERSION DESCRIPTION RELEASEDATE TYPE 
/artifacts/download.txt 2.0  images  25/6/12  download.txt 

Type स्तंभ मैं फ़ाइल का नाम geting हूँ में। मुझे Type कॉलम में फ़ाइल नाम का फ़ाइल एक्सटेंशन प्राप्त करने की आवश्यकता है। इसे कैसे प्राप्त किया जा सकता है?

उदाहरण:

TYPE 
.txt 
.pdf 
.xls 
+0

क्या आप PHP का उपयोग कर रहे हैं? –

+2

यदि आपके पास 'Test.Document.doc' नाम की फ़ाइल है तो आप क्या होने की उम्मीद करेंगे? अगर कोई एक्सटेंशन निर्दिष्ट नहीं किया गया था तो क्या होगा? – Bridge

+0

@bridge मैं केवल फ़ाइल नाम का विस्तार चाहता हूं – anto

उत्तर

16

आप SUBSTRING_INDEX उपयोग कर सकते हैं। इस तरह:

select linkurl as DOWNLOADURL,lastrevlevel as VERSION, 
code as DESCRIPTION,created as RELEASEDATE, 
SUBSTRING_INDEX(name,'.',-1) as TYPE 
from datas where id in 
(select child_id from datas _datas 
where parent_id=(select max(id) from datas 
where code = 'AN4307SW')) 

संपादित

आप इस समारोह पर डॉक्स देखते हैं, तो मुझे लगता है कि यह अच्छी तरह से आप आवश्यकताओं के लिए लागू होगी।

डिलीमीटर डेलीम की गिनती घटनाओं से पहले स्ट्रिंग स्ट्र से सबस्ट्रिंग देता है। यदि गिनती सकारात्मक है, तो अंतिम डिलीमीटर (बाईं ओर से गिनती) के बाईं ओर सब कुछ वापस कर दिया गया है। यदि गिनती ऋणात्मक है, तो अंतिम डिलीमीटर के दाईं ओर सब कुछ (दाएं से गिनती) वापस आ गया है। SUBSTRING_INDEX() delim के लिए खोज करते समय केस-संवेदी मिलान करता है।

यह भी इस तरह के मामले को संभाल लेंगे:

select SUBSTRING_INDEX('Test.Document.doc','.',-1); 

EDIT2

आप ओरेकल उपयोग कर रहे हैं। अगली बार सही मामले में प्रश्न को टैग करें। ओरेकल में SUBSTRING_INDEX नहीं है। लेकिन मैं क्या देख सकते हैं आप काफी आसान कर सकते हैं:

SELECT SUBSTR('Test.Document.doc', INSTR('Test.Document.doc', '.',-1)) 
FROM dual; 

इस तरह पूर्ण क्वेरी:

select linkurl as DOWNLOADURL,lastrevlevel as VERSION, 
    code as DESCRIPTION,created as RELEASEDATE, 
    SUBSTR(name, INSTR(name, '.',-1)) as TYPE 
    from datas where id in 
    (select child_id from datas _datas 
    where parent_id=(select max(id) from datas 
    where code = 'AN4307SW')) 

संदर्भ here

+0

thnks लेकिन जब मैं इस क्वेरी को निष्पादित करता हूं तो यह अमान्य पहचानकर्ता SUBSTRING_INDEX दिखा रहा है .. मैं टैग में ओरेकल – anto

+0

@anto का उपयोग कर रहा हूं आपने mysql का उल्लेख किया है। –

+0

उत्तर – Arion

2
select linkurl as DOWNLOADURL,lastrevlevel as VERSION, 
code as DESCRIPTION,created as RELEASEDATE,reverse(substring(reverse(name), 1,charindex('.', reverse(name))-1)) as TYPE 
from datas where id in 
(select child_id from datas _datas 
where parent_id=(select max(id) from datas 
where code = 'AN4307SW')) 
+0

... बस इस समाधान को अच्छी तरह से काम करने की कोशिश की गई है, इसमें परिदृश्य भी शामिल हैं जहां फ़ाइल नाम 'some.thing.txt' –

+0

@rohan, हाँ :) –

0

लगता है कि आप इस

की तरह कुछ की आवश्यकता होगी
SELECT REPLACE(name,SUBSTRING(name ,0, CHARINDEX('.', name)),'') 
+0

का चयन कर सकता है (सब्सक्राइबिंग (रिवर्स (नाम), 1, LOCATE ('।', रिवर (नाम), 1)) – mansi

+0

मैं इसे एक और उत्तर के रूप में पोस्ट करना चाहता हूं लेकिन इसे यहां गलत टिप्पणी के रूप में पोस्ट किया गया है। लेकिन मैं इस टिप्पणी को कैसे हटा सकता हूं? हटाने के लिए कोई विकल्प नहीं है – mansi

0
SELECT 
    SUBSTRING(file_name,(LENGTH(file_name)-LOCATE('.',REVERSE(file_name)))+2) 
FROM <table name> WHERE file_id=<file_id>; 
0
SELECT REVERSE(SUBSTRING(REVERSE(name),1,LOCATE('.',REVERSE(name),1‌​)));