SQL子字符串获取特定字符

时间:2016-10-13 09:23:00

标签: sql postgresql

列中的结果是:

14800:DATAB Unload

我试图获取所有数字:所以我只收到数字。

我应该在选择中完成这项工作?

2 个答案:

答案 0 :(得分:1)

for mysql

SELECT LEFT(you_column,LOCATE(':',your_column) - 1) from your_table

for postgresql

SELECT substr(you_column , 1,  position( ':' in  your_column) - 1) from your_table

SELECT left(you_column , position( ':' in  your_column) - 1) from your_table

答案 1 :(得分:0)

您可以使用正则表达式:

[DEPRECATION WARNING]: Using bare variables is deprecated. Update your playbooks so that the environment value uses the full 
variable syntax ('{{groups["myhost"]}}').
This feature will be removed in a future release. Deprecation warnings can be disabled 
by setting deprecation_warnings=False in ansible.cfg.

或使用select regexp_replace(the_column, '(^[0-9]+):.*', '\1') from the_table; 功能:

left()

正则表达式对于不包含数字或select left(the_column, strpos(col, ':') - 1) from the_table; 的字符串更加健壮。如果您确定每个值中都包含:,那么第二个解决方案应该是首选,因为速度要快得多。

以下示例:

:

返回:

with data (col) as (
  values ('14800:DATAB Unload'), ('Another Unload')
)
select regexp_replace(col, '(^[0-9]+):.*', '\1'), 
       left(col, strpos(col, ':') - 1)
from data;

第二个值将由正则表达式解决方案保持不变,但在使用regexp_replace | left ----------------+------------ 14800 | 14800 Another Unload | Another Unloa 时将切断最后一个字符。