Код, подобный регулярному выражению, не будет возвращать числа, начинающиеся с 0

#sql #db2

Вопрос:

Я пытаюсь вернуть числа из строк, которые являются либо целыми числами (положительными или отрицательными), либо числами с точностью до двух знаков после запятой, однако код, похоже, игнорирует числа, начинающиеся с 0, я надеюсь на некоторую помощь в устранении этой проблемы, код выглядит следующим образом :

 WITH A AS(
SELECT CURRENT_BALANCE, ( CASE WHEN (REGEXP_LIKE(CURRENT_BALANCE,'^-?[0-9] (.[0-9]{1,2})?

-- Проблема заключается в том, что regexp_like заключается в том, что приведенный выше код только что вернул мне номера, которые не были приняты

Изменить: Пример того, что не возвращается: 0.00, -0.07, 0.04 Спасибо


Комментарии:

1. Пожалуйста, приведите примеры того, что соответствует, а что нет, когда вы считаете, что это должно быть. Кроме того, зачем current_balance хранить в виде строки?

2. Извините, что я добавил примеры в пост и, честно говоря, как изначально была настроена таблица - предположительно, чтобы иметь возможность добавлять N/A или иным образом отличать, где нам не хватает информации, в отличие от просто нуля

3. Ваш код обрабатывает указанные значения так же, как он обрабатывает целые числа: dbfiddle.uk/. ...

Ответ №1:

Пожалуйста, попробуйте с WHERE T = 1

 WITH A AS(
SELECT CURRENT_BALANCE, ( CASE WHEN (REGEXP_LIKE(CURRENT_BALANCE,'^-?[0-9] (.[0-9]{1,2})?


Комментарии:

1. Это вернет атрибуты, которые соответствовали критериям REGEXP_LIKE, однако я использовал код , чтобы найти строки , которые этого не сделали, я ищу помощи в том, почему следующее не соответствует критериям и как это исправить : 0.00, 0.06, -0.04

2. Не могли бы вы поделиться образцами данных из таблицы BALANCE_TABLE, с которыми это не работает.

3. Либо сообщите, что не так с результатом инструкции по ссылке dbfiddle, либо отредактируйте это заявление с вашими данными, предоставьте соответствующую ссылку и опишите, что не так с результатом в ваших данных.

)) then 1 ELSE 0 end ) AS T FROM BALANCE_TABLE )

SELECT * FROM A
WHERE T = 0
LIMIT 1
-- Проблема заключается в том, что regexp_like заключается в том, что приведенный выше код только что вернул мне номера, которые не были приняты

Изменить: Пример того, что не возвращается: 0.00, -0.07, 0.04 Спасибо

Комментарии:

1. Пожалуйста, приведите примеры того, что соответствует, а что нет, когда вы считаете, что это должно быть. Кроме того, зачем current_balance хранить в виде строки?

2. Извините, что я добавил примеры в пост и, честно говоря, как изначально была настроена таблица - предположительно, чтобы иметь возможность добавлять N/A или иным образом отличать, где нам не хватает информации, в отличие от просто нуля

3. Ваш код обрабатывает указанные значения так же, как он обрабатывает целые числа: dbfiddle.uk/. ...

Ответ №1:

Пожалуйста, попробуйте с WHERE T = 1


Комментарии:

1. Это вернет атрибуты, которые соответствовали критериям REGEXP_LIKE, однако я использовал код , чтобы найти строки , которые этого не сделали, я ищу помощи в том, почему следующее не соответствует критериям и как это исправить : 0.00, 0.06, -0.04

2. Не могли бы вы поделиться образцами данных из таблицы BALANCE_TABLE, с которыми это не работает.

3. Либо сообщите, что не так с результатом инструкции по ссылке dbfiddle, либо отредактируйте это заявление с вашими данными, предоставьте соответствующую ссылку и опишите, что не так с результатом в ваших данных.

)) then 1 ELSE 0 end ) AS T FROM BALANCE_TABLE )

SELECT * FROM A
WHERE T = 1
LIMIT 1

Комментарии:

1. Это вернет атрибуты, которые соответствовали критериям REGEXP_LIKE, однако я использовал код , чтобы найти строки , которые этого не сделали, я ищу помощи в том, почему следующее не соответствует критериям и как это исправить : 0.00, 0.06, -0.04

2. Не могли бы вы поделиться образцами данных из таблицы BALANCE_TABLE, с которыми это не работает.

3. Либо сообщите, что не так с результатом инструкции по ссылке dbfiddle, либо отредактируйте это заявление с вашими данными, предоставьте соответствующую ссылку и опишите, что не так с результатом в ваших данных.

)) then 1 ELSE 0 end ) AS T FROM BALANCE_TABLE )

SELECT * FROM A
WHERE T = 0
LIMIT 1

— Проблема заключается в том, что regexp_like заключается в том, что приведенный выше код только что вернул мне номера, которые не были приняты

Изменить: Пример того, что не возвращается: 0.00, -0.07, 0.04 Спасибо

Комментарии:

1. Пожалуйста, приведите примеры того, что соответствует, а что нет, когда вы считаете, что это должно быть. Кроме того, зачем current_balance хранить в виде строки?

2. Извините, что я добавил примеры в пост и, честно говоря, как изначально была настроена таблица — предположительно, чтобы иметь возможность добавлять N/A или иным образом отличать, где нам не хватает информации, в отличие от просто нуля

3. Ваш код обрабатывает указанные значения так же, как он обрабатывает целые числа: dbfiddle.uk/.

Ответ №1:

Пожалуйста, попробуйте с WHERE T = 1


Комментарии:

1. Это вернет атрибуты, которые соответствовали критериям REGEXP_LIKE, однако я использовал код , чтобы найти строки , которые этого не сделали, я ищу помощи в том, почему следующее не соответствует критериям и как это исправить : 0.00, 0.06, -0.04

2. Не могли бы вы поделиться образцами данных из таблицы BALANCE_TABLE, с которыми это не работает.

3. Либо сообщите, что не так с результатом инструкции по ссылке dbfiddle, либо отредактируйте это заявление с вашими данными, предоставьте соответствующую ссылку и опишите, что не так с результатом в ваших данных.