db2 приводит двойное к varchar без потери нулей - PullRequest
0 голосов
/ 14 мая 2018

Я должен проверить на неправильные значения, используя выражение regexp_like.Насколько я понимаю, я могу сделать это только для строк, и мои данные сохраняются в базе данных как двойной.

Я попытался привести его

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 голосов
/ 14 мая 2018

Для 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)')

Для 2-го запроса, увеличить дробную часть 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)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...