2012-06-08 44 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列我歌廳文件的名稱。我需要在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')) 

編輯

如果您看到此功能的文檔,我認爲這將完全適用於您的需求。

在計數出現 定界符定界符之前,返回字符串str中的子串。如果count爲正值,則返回 最後一個分隔符(從左數起)左側的所有內容。如果計數爲 爲負數,則返回最後一個分隔符右側的所有內容(從右數起計算 )。 SUBSTRING_INDEX()在搜索delim時執行 區分大小寫的匹配。

這也將處理的情況下是這樣的:

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

EDIT2

如果您使用的是Oracle。下次請在正確的問題上標記問題。 oracle中沒有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 ..我在標記中使用oracle – 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,yes :) –

0

認爲你需要像這樣

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

select REVERSE(SUBSTRING (REVERSE(name),1,LOCATE('。',REVERSE(name),1))) – mansi

+0

我想將它作爲另一個ans發佈,但它的錯誤發佈在這裏。但我如何刪除此評論?沒有選擇刪除 – 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‌​))); 
相關問題