如何从左侧选择字符,不包括右侧的.txt

问题描述 投票:0回答:4

该列有一个不统一的数据,有些在末尾有“.txt”。将其中一个条目视为“ABCDEFG.TXT”我想让我的select语句返回“ABCDEFG”。

database oracle
4个回答
0
投票
with demo (text) as
     ( select 'ABCDEFG.TXT' from dual union all
       select 'HIJKL' from dual )
select text
     , regexp_replace(text, '\.TXT$')
from   demo;

TEXT         REGEXP_REPLACE(TEXT,'\.TXT$')
------------ --------------------------------------------
ABCDEFG.TXT  ABCDEFG
HIJKL        HIJKL

或者,如果您需要它不区分大小写:

with demo (text) as
     ( select 'ABCDEFG.TXT' from dual union all
       select 'abcdefg.txt' from dual union all
       select 'HIJKL' from dual )
select text
     , regexp_replace(text, '\.TXT$', '', 1, 1, 'i') as replaced
from   demo;

TEXT         REPLACED
------------ --------------------------------------------
ABCDEFG.TXT  ABCDEFG
abcdefg.txt  abcdefg
HIJKL        HIJKL

或者删除任何三个字符的文件扩展名:

regexp_replace(text, '\....$', '', 1, 1, 'i')

或者去除任何长度的任何扩展:

regexp_replace(text, '\.[^.]*$', '', 1, 1, 'i')

0
投票

以下查询将有所帮助

DECLARE @Var NVARCHAR(50)
SET @Var = 'ABCDASDFASF.txt'

SELECT LEFT(@Var, CHARINDEX('.', @Var)-1) 'Filename' 

输出:

Filename
--------------------------------------------------
ABCDASDFASF

(1 row(s) affected)

0
投票

解:

select
    case
        when upper(file_name) like '%.TXT' then substr(file_name, 1, (length(file_name) - 4))
        else file_name
    end  cleaned_file_name
from
    file_names;

测试:

create table file_names
(
    file_name     varchar2(30)
);

insert into file_names (file_name) values ('ABCDEFG');
insert into file_names (file_name) values ('ABCDEFG.TXT');
insert into file_names (file_name) values ('ABCDEFGTXT');
insert into file_names (file_name) values ('ABCD.TXT.EFG');
insert into file_names (file_name) values ('abcdefg.txt');
insert into file_names (file_name) values ('ABCDEFG.DOC');

select
    case
        when upper(file_name) like '%.TXT' then substr(file_name, 1, (length(file_name) - 4))
        else file_name
    end  cleaned_file_name
from
    file_names;

CLEANED_FILE_NAME
--------------------------------------------------------------------------------
ABCDEFG
ABCDEFG
ABCDEFGTXT
ABCD.TXT.EFG
abcdefg
ABCDEFG.DOC

6 rows selected.

0
投票

你可以使用SUBSTRINSTR的组合,它比REGEXP_函数更有效。

即使您的文本中有多个点".",这也有效。它搜索最后一个点。如果您需要考虑所有类型的扩展,请搜索'.'而不是'.TXT'。然后你应该搜索CASE WHEN txt LIKE '%.%'作为一般情况。

SELECT
   CASE
      WHEN
         INSTR ( upper(txt) , '.TXT' ) > 0 
      THEN
         SUBSTR(txt, 1, INSTR ( txt, '.' , - 1 ) - 1 ) 
      ELSE
         txt 
   END
   modtxt 
FROM
   yourtable;

DEMO

© www.soinside.com 2019 - 2024. All rights reserved.