我需要删除列中的非数字字符(字符变化)并在postgresql 9.3.5中保留数值。
示例:
1) "ggg" => ""
2) "3,0 kg" => "3,0"
3) "15 kg." => "15"
4) ...
有一些问题,有些值如下:
1) "2x3,25"
2) "96+109"
3) ...
这些需要保持原样(即在数字字符之间包含非数字字符时 - 什么都不做)。
有什么想法吗?
答案 0 :(得分:31)
使用regexp_replace更简单:
# select regexp_replace('test1234test45abc', '[^0-9]+', '', 'g');
regexp_replace
----------------
123445
(1 row)
答案 1 :(得分:6)
要修改PostgreSQL中的字符串,请查看文档的The String functions and operators部分。函数substring(string from pattern)
使用POSIX regular expressions for pattern matching,可以很好地从字符串中删除不同的字符
(请注意,括号内的VALUES
子句只是提供示例材料,您可以将其替换为提供数据的任何SELECT
语句或表格:
SELECT substring(column1 from '(([0-9]+.*)*[0-9]+)'), column1 FROM
(VALUES
('ggg'),
('3,0 kg'),
('15 kg.'),
('2x3,25'),
('96+109')
) strings
正则表达式在部分中解释:
[0-9]+
- 字符串至少包含一个数字,例如:'789'
[0-9]+.*
- 字符串后面至少有一个数字,例如:'12smth'
([0-9]+.\*)*
- 类似于前一行的字符串零次或多次,例如:'12smth22smth'
(([0-9]+.\*)*[0-9]+)
- 前一行的字符串为零次或多次,最后至少包含一个数字,例如:'12smth22smth345'