Sql 如何在特殊字符首次出现之前获取字符串

Sql 如何在特殊字符首次出现之前获取字符串,sql,oracle,Sql,Oracle,我有一列包含以下格式的主机名: oraclehost.server.region.company.net 如何从主机名中提取oraclehost部分,即第一个前面的字符串 请给出建议。谢谢。或者,substr+instr组合可能对大型数据集性能更好: SELECT REGEXP_SUBSTR(HOSTNAMES, '[^.]+', 1, 1) FROM MYTABLE; substr(hostnames, 1, instr(hostnames, '.') - 1) 例如: SQL>

我有一列包含以下格式的主机名:

oraclehost.server.region.company.net
如何从主机名中提取
oraclehost
部分,即第一个
前面的字符串


请给出建议。谢谢。

或者,
substr+instr
组合可能对大型数据集性能更好:

SELECT REGEXP_SUBSTR(HOSTNAMES, '[^.]+', 1, 1) FROM MYTABLE;
substr(hostnames, 1, instr(hostnames, '.') - 1)
例如:

SQL> with mytable (hostnames) as
  2    (select 'oraclehost.server.region.company.net' from dual)
  3  select substr(hostnames, 1, instr(hostnames, '.') - 1) result
  4  from mytable;

RESULT
----------
oraclehost

SQL>

或者,
substr+instr
组合可能对大型数据集表现更好:

substr(hostnames, 1, instr(hostnames, '.') - 1)
例如:

SQL> with mytable (hostnames) as
  2    (select 'oraclehost.server.region.company.net' from dual)
  3  select substr(hostnames, 1, instr(hostnames, '.') - 1) result
  4  from mytable;

RESULT
----------
oraclehost

SQL>

请你解释一下它如何表现得更好。我认为这与regexp_substr的内部工作有关,需要花费更多的CPU。如果字符串中没有句点字符,则返回
NULL
(而不是整个字符串)。OP说:“包含主机名的列的格式为:oraclehost.server.region.company.net”,所以。。。字符串中应该有句点字符。事实上,其中4个是@MT0。如果这不是他们所拥有的,我想他们应该这么说。在OP的情况下,是的。但是,可能有许多其他用户访问具有类似(但不完全相同)问题的问题,并且此答案对OP问题标题“如何在首次出现特殊字符之前获取字符串”中的一般问题的限制它不会处理特殊角色不存在的情况,这值得向未来的读者强调。当然,对您刚才所说的@MT0.Hi没有异议,请您解释一下它将如何表现得更好。我认为这与regexp_substr的内部工作有关,需要花费更多的CPU。如果字符串中没有句点字符,则返回
NULL
(而不是整个字符串)。OP说:“包含主机名的列的格式为:oraclehost.server.region.company.net”,所以。。。字符串中应该有句点字符。事实上,其中4个是@MT0。如果这不是他们所拥有的,我想他们应该这么说。在OP的情况下,是的。但是,可能有许多其他用户访问具有类似(但不完全相同)问题的问题,并且此答案对OP问题标题“如何在首次出现特殊字符之前获取字符串”中的一般问题的限制它不会处理特殊角色不存在的情况,这值得向未来的读者强调。绝对不会反对你刚才所说的,@MT0。