我必须使用regexp_like表达式检查错误的值。据我所知,我只能在字符串上执行此操作,并且我的数据在数据库中保存为double。
我试图施展它
SELECT column
FROM table
WHERE NOT REGEXP_LIKE(CAST(DECFLOAT(column) as VARCHAR(25)), '(\d{6}\.?\d{2})|(\d{7}\.?\d)')
不幸的是,像1234567.0这样的值被转换为1234567,结果这个查询将其作为错误返回。
其他解决方案如
SELECT column
FROM table
WHERE NOT REGEXP_LIKE(CAST(CAST(column AS DECIMAL(8,1)) AS VARCHAR(25)), '(\d{6}\.?\d{2})|(\d{7}\.?\d)')
会导致问题,例如134567.89
之类的值会转换为1234567.8
,并且查询不会将其返回为不正确的值。
有没有办法将它投射到varchar
而不给它一个范围?
答案 0 :(得分:1)
对于第一个查询,请勿将列转换为 DECFLOAT 。
SELECT column
FROM table
WHERE NOT REGEXP_LIKE(CAST(CAST(column as DECIMAL(8,2)) as VARCHAR(25)), '(\d{6}\.?\d{2})|(\d{7}\.?\d)')
对于第二个查询,将 DECIMAL(8,1)的小数部分增加到 DECIMAL(8,2)以获得所需的结果。
SELECT column
FROM tabel
WHERE NOT REGEXP_LIKE(CAST(CAST(column AS DECIMAL(8,2)) AS VARCHAR(25)), '(\d{6}\.?\d{2})|(\d{7}\.?\d)')