8

私のpostgresql 9.1には、家番号を含むこのサンプルテーブルがあります。

drop table if exists mytable;
create table mytable(road_id int, housenr text);
insert into mytable(road_id, housenr) values

('11', '1' ),
('22', '12' ), 
('33', '99/1' ),
('44', '88' ),
('55', '2' ),
('66', '28' ),
('77', '29')
;

ここで、「housenr」列全体を INT フィールドに変換する必要があります。キャスト可能な列からこれらの行のみをキャストする方法は SQL にありますか。mytable では、これは "housenr" = 99/1 の行を除くすべての行になります。
次のようなもの: FOR EACH ROW IF ::int IS POSSIBLE 行をキャストする ELSE REMOVE FROM TABLE

4

2 に答える 2

12

REGEXを使用して列の値を評価し、それが数値であるかどうかを判断できます。

select * FROM MyTable where (housenr !~ '^[0-9]+$')

SQLFiddleは次のとおりです。

http://sqlfiddle.com/#!1/d2ff3/9

これが〜と〜に関するPostgresqlのドキュメントです!

http://www.postgresql.org/docs/current/static/functions-matching.html#FUNCTIONS-POSIX-TABLE

于 2013-01-02T17:28:16.327 に答える