select语句显示所需的输出

时间:2015-02-06 16:28:40

标签: sql oracle oracle11g

我在表格中有一个列,其值与此类似:

key_value

例如:

3933984948498934_khkhk
81299191ahgtyu092092092019_92982
abh182772hjjlj98879bjj_122778999

_在所有值中都很常见。我需要一个脚本来复制值的某些部分,即在_之前复制所有内容,而不是在_之后显示该列中所有值的任何内容。

我需要一个select语句来显示输出,如上所述。

例如:实际值为3933984948498934_khkhk,但我只需要3933984948498934  实际值81299191ahgtyu092092092019_92982,但所需的输出为81299191ahgtyu092092092019

我觉得使用substr函数很麻烦,因为值是动态的。

1 个答案:

答案 0 :(得分:1)

您可以使用正则表达式,例如:

SELECT REGEXP_SUBSTR(key_value, '^[^_]*')
  FROM mytable;

但正则表达式是资源密集型的;使用SUBSTR()INSTR()

可以更好地为您提供服务
SELECT SUBSTR(key_value, 1, INSTR(key_value, '_') - 1)
  FROM mytable;

请注意,如果NULL不包含下划线key_value,后一种方法将失败(实际上,它将返回_)。所以你可以把它包装在COALESCE()

SELECT COALESCE(SUBSTR(key_value, 1, INSTR(key_value, '_') - 1), key_value)
  FROM mytable;