我在表格中有一个列,其值与此类似:
key_value
例如:
3933984948498934_khkhk
81299191ahgtyu092092092019_92982
abh182772hjjlj98879bjj_122778999
_
在所有值中都很常见。我需要一个脚本来复制值的某些部分,即在_
之前复制所有内容,而不是在_
之后显示该列中所有值的任何内容。
我需要一个select语句来显示输出,如上所述。
例如:实际值为3933984948498934_khkhk
,但我只需要3933984948498934
实际值81299191ahgtyu092092092019_92982
,但所需的输出为81299191ahgtyu092092092019
。
我觉得使用substr
函数很麻烦,因为值是动态的。
答案 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;