2012-06-08 14 views
6

Ho una tabella di nome datas e sto eseguendo una query come questa:Come ottenere l'estensione del file come risultato della query 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')) 

Esso restituisce risultati come questo:

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

Nella colonna Type sto geting nome del file. Ho bisogno di ottenere l'estensione del file del nome del file nella colonna Type. Come posso raggiungere questo obiettivo?

Esempi:

TYPE 
.txt 
.pdf 
.xls 
+0

Stai utilizzando php? –

+2

Cosa ti aspetteresti che accada se avessi un file chiamato "Test.Document.doc"? Che dire se non è stata specificata alcuna estensione? – Bridge

+0

@bridge voglio solo l'estensione del nome file – anto

risposta

16

È possibile utilizzare SUBSTRING_INDEX. Come questo:

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')) 

EDIT

Se si vede la documentazione su questa funzione Penso che questo si applica bene a voi requisiti.

Restituisce la sottostringa da stringa str prima delle occorrenze di conteggio del delimitatore delimiter. Se il conteggio è positivo, viene restituito tutto a sinistra del delimitatore finale (conteggio da sinistra). Se il conteggio è negativo, viene restituito tutto a destra del delimitatore finale (contando da destra). SUBSTRING_INDEX() esegue una corrispondenza con distinzione tra maiuscole e minuscole durante la ricerca di delim.

Questo sarà anche gestire un caso come questo:

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

EDIT2

Se si utilizza Oracle. Si prega di taggare la domanda nella questione giusta la prossima volta. Non c'è SUBSTRING_INDEX in oracolo. Ma quello che posso vedere si può fare questo abbastanza facile:

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

query full come questo:

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')) 

Riferimento here

+0

thnks ma quando eseguo questa query mostra identificativo non valido SUBSTRING_INDEX .. sto usando oracle – anto

+0

@anto nei tag Hai menzionato mysql. –

+0

Aggiornamento della risposta – 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

... ho appena provato che questa soluzione funziona bene, copre anche scenari in cui il nome di un file potrebbe essere simile a questo "qualcosa.txt" –

+0

@rohan, sì :) –

0

pensare avrete bisogno di qualcosa di simile

SELECT REPLACE(name,SUBSTRING(name ,0, CHARINDEX('.', name)),'') 
+0

seleziona REVERSE (SUBSTRING (REVERSE (nome), 1, LOCATE ('.', REVERSE (nome), 1))) – mansi

+0

Voglio postarlo come un altro ans ma è stato postato come commento qui erroneamente. ma come faccio a cancellare questo commento? non c'è un'opzione da eliminare – 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‌​))); 
Problemi correlati