【问题标题】:Substring of a specific occurence特定事件的子字符串
【发布时间】:2019-05-28 13:10:04
【问题描述】:

我有一列作为 varchar2 数据类型,其中的数据格式为:

100323.3819823.222
100.323123.443422
1001010100.233888
LOL12333.DDD33.44

我需要在第一次出现 '.' 后删除整个部分

最后应该是这样的:

100323
100
1001010100
LOL12333

由于第一部分没有任何固定长度,我似乎无法找到确切的子字符串表达式。

【问题讨论】:

  • 你知道Oracle的REGEXP_SUBSTR吗?
  • 添加一行没有.,一行只有.等,并相应调整预期结果。

标签: sql oracle substr


【解决方案1】:

一种方法是使用REGEXP_SUBSTR:

SELECT REGEXP_SUBSTR(column_name,'^[^.]*') FROM table

另一种方法是将SUBSTRINSTR结合起来,这样会快一点,但如果数据不包含点,则会产生NULL,因此如果出现这种情况,则必须添加开关需要:

SELECT SUBSTR(column_name, 1, INSTR(column_name,'.') - 1) FROM table

【讨论】:

  • 另外观察到 SUBSTR + INSTR 解决方案会快很多,如果这很重要的话。
【解决方案2】:

对于 oracle,你可以试试这个:

select substr (i,1,Instr(i,'.',i)-1) from Table name.

【讨论】:

  • 我不熟悉 Oracle SQL 中的 @ 符号。您确定您的解决方案适用于 Oracle 数据库吗?
  • 你必须用你的表名替换@t。我不确定 charindex 在 Oracle 中是否可用。
  • Oracle 没有 CHARINDEX 函数。
  • 据我所知,CHARINDEX 只存在于 SQL Server 中。供您参考,Oracle 具有INSTR 功能。你没看到这个问题的“oracle”标签吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多