db2将double转换为varchar而不会丢失零

时间:2018-05-14 09:03:06

标签: sql db2

我必须使用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而不给它一个范围?

1 个答案:

答案 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)')