13

という名前のテーブルがdatasあり、次のようなクエリを実行しています。

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
4

6 に答える 6

30

使用できます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'))

編集

この機能に関するドキュメントが表示された場合、これは要件によく当てはまると思います。

区切り文字 delim が count 回出現する前に、文字列 str から部分文字列を返します。count が正の場合、最後の区切り文字の左側 (左から数えて) のすべてが返されます。count が負の場合、最後の区切り文字の右側 (右から数えて) のすべてが返されます。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'))

ここを参照

于 2012-06-08T08:45:28.760 に答える
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'))  
于 2012-06-08T08:48:09.087 に答える
1

このようなものが必要になると思います

SELECT REPLACE(name,SUBSTRING(name ,0, CHARINDEX('.', name )),'')
于 2012-06-08T08:57:18.473 に答える
1
SELECT REVERSE(SUBSTRING(REVERSE(name),1,LOCATE('.',REVERSE(name),1‌​)));
于 2017-10-18T12:01:36.650 に答える
0
SELECT
    SUBSTRING(file_name,(LENGTH(file_name)-LOCATE('.',REVERSE(file_name)))+2)
FROM <table name> WHERE file_id=<file_id>;
于 2015-09-08T14:23:19.023 に答える