使用SQL从列中提取数据

时间:2014-08-29 07:03:07

标签: sql oracle

我有一个名为设备名称的列,其中包含以下数据:

Drivers/BacnetIdentifiers/FP VeV 4-01 Training Lobby
Drivers/BacnetIdentifiers/FP CaV 4-01 Training Lobby
Drivers/BacnetIdentifiers/FP altu 4-01 auditorium
Drivers/BacnetIdentifiers/devicegn/FP altu 4-01 auditorium

需要使用SQL在最后一个“/”之后提取数据。 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

regexp_replace(your_string, '^.*/')

答案 1 :(得分:0)

SELECT SUBSTR
       (
            "device" ,
            INSTR("device" , '/', -1)+1,
            INSTR("device" , '/', -1)
       )
FROM   Devices

说明:

SUBSTR:这是一个返回字符串一部分的函数。它需要以下3个参数

Initial string:这是您需要参与其中的字符串。在您的情况下,这是您的表格列。

Start Index:这是你的部分应该开始的初始字符串的索引。

Length:这是您想要返回的部分的长度。

示例

SUBSTR('ABCDEF',3,2) -- Returns 'CD'

将从字符串的第三个字符开始获得2个字符' ABCDEF'。

要在您的情况下返回,Initial string是您的表格列。 Start index应该是字符' /'的最后一个索引(最后一次出现)。为了找到这个,我们将使用以下函数:

INSTR:这是一个函数,它返回字符串中字符串的位置,并具有以下参数:

Initial string:这是您要在其中查找子字符串的字符串

substring:这就是您要搜索的内容。

Start position:您在第一个字符串的哪个位置开始搜索。如果这是一个负数,那么你从字符串的结尾开始到开始。在您的情况下,我们搜索第一次出现的' /'从你的字符串的末尾。

示例

INSTR('Drivers/BacnetIdentifiers/FP VeV 4-01 Training Lobby' , '/', -1) -- Returns 26

这将返回27,这是角色的第一次出现' /'从字符串的末尾

LENGTH:是一个返回指定字符串长度的函数。

示例

LENGTH('ABCDEF') -- Returns 6

结合所有这些,我们说在最后一次出现' /'之后我们想要一个数量的字符。在我们专栏的价值范围内。