我需要删除列中的非数字字符(字符变化)并在postgresql 9.3.5中保留数值.
例子:
1) "ggg" => ""
2) "3,0 kg" => "3,0"
3) "15 kg." => "15"
4) ...
Run Code Online (Sandbox Code Playgroud)
有一些问题,有些值如下:
1) "2x3,25"
2) "96+109"
3) ...
Run Code Online (Sandbox Code Playgroud)
这些需要保持原样(即在数字字符之间包含非数字字符时 - 什么都不做).
有任何想法吗?
pen*_*rik 37
使用regexp_replace更简单:
# select regexp_replace('test1234test45abc', '[^0-9]+', '', 'g');
regexp_replace
----------------
123445
(1 row)
Run Code Online (Sandbox Code Playgroud)
要修改PostgreSQL中的字符串,请查看文档的字符串函数和运算符部分.函数substring(string from pattern)使用POSIX正则表达式进行模式匹配,并且可以很好地从字符串中删除不同的字符.
(请注意,VALUES括号内的子句只是提供示例材料,您可以将其替换SELECT为提供数据的任何语句或表):
SELECT substring(column1 from '(([0-9]+.*)*[0-9]+)'), column1 FROM
(VALUES
('ggg'),
('3,0 kg'),
('15 kg.'),
('2x3,25'),
('96+109')
) strings
Run Code Online (Sandbox Code Playgroud)
正则表达式部分解释:
[0-9]+ - 字符串至少有一个数字,例如: '789'[0-9]+.* - 字符串至少有一个数字,后跟一些东西,例如: '12smth'([0-9]+.\*)* - 类似于前一行的字符串零次或多次,例如: '12smth22smth'(([0-9]+.\*)*[0-9]+) - 前一行的字符串为零或更多次,最后至少有一个数字,例如: '12smth22smth345'| 归档时间: |
|
| 查看次数: |
17493 次 |
| 最近记录: |