Postgre 正则表达式在使用 dbi 的 perl 代码中不起作用
Postgre regexp does not work in perl code using dbi
我在 postgres 中有这个简单的数据 table(数据类型是字符变化的):
48
2
L
4XL
25.0
25
7.0
我有这个 sql 查询与正则表达式匹配(我只想匹配像 7.0 或 48 这样的数值):
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
这在命令行客户端 psql,
中完美运行
但在 perl 代码中不起作用:
my $sth = $dbh->prepare(
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$')
);
$sth->execute
while ( my @row = $sth->fetchrow_array() ) {
# no data i want
}
字符串文字
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$')
产生字符串
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
得到
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
你需要
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\\s*[\\d\\.]+\\s*$')
我在 postgres 中有这个简单的数据 table(数据类型是字符变化的):
48
2
L
4XL
25.0
25
7.0
我有这个 sql 查询与正则表达式匹配(我只想匹配像 7.0 或 48 这样的数值):
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
这在命令行客户端 psql,
中完美运行
但在 perl 代码中不起作用:
my $sth = $dbh->prepare(
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$')
);
$sth->execute
while ( my @row = $sth->fetchrow_array() ) {
# no data i want
}
字符串文字
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$')
产生字符串
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
得到
SELECT * FROM table WHERE ss.sizecode ~ E'^\s*[\d\.]+\s*$'
你需要
q(SELECT * FROM table WHERE ss.sizecode ~ E'^\\s*[\\d\\.]+\\s*$')