У меня есть процедура, которая обновляет table1 некоторыми значениями table 2. Мне нужно проверить, содержит ли одно из конкретных полей (возраст) более двух цифр.

table 2

code name      age
  1  jose       21
  2  peter      36
  3  jhon       50
  4  charlie   021

Когда процедура запускается, она выдает ошибку, потому что значение возраста поля charlie table1 имеет более двух цифр.

Мне нужен запрос для проверки значения перед ОБНОВЛЕНИЕМ; если поле возраста состоит из 3 цифр, удалите первую и передайте значение из 2 цифр. Пример:

code name     age
   3 charlie  021

Чтобы :

code name     age
   3 charlie   21

А потом сделаю процедуру.

Я использовал этот запрос, чтобы узнать длину поля

SELECT age, LENGTH(TRIM(table2.age)) FROM table2;

age    LENGTH(TRIM(table2.age))
 21     2
 36     2
 50     2
 021    3
0
spikeTJ 8 Дек 2014 в 22:34
1
Всегда ли это будут правильные 2 символа? Вы можете использовать right(age,2)... А как насчет возраста 100 лет и старше? Я бы предложил хранить их как целые числа, и тогда у вас не было бы этой проблемы.
 – 
sgeddes
8 Дек 2014 в 22:40
Можешь показать свой SP.тогда его будет легко исправить.
 – 
theDbGuy
9 Дек 2014 в 08:30

2 ответа

Лучший ответ

Вам нужно использовать метод SUBSTRING ('Sakila', -2), чтобы получить последние две цифры с длиной> 2.

ВЫБЕРИТЕ СЛУЧАЙ, КОГДА length (trim (age))> 2 THEN SUBSTRING (age, -2) ELSE age END;

Без всяких условий -

ВЫБЕРИТЕ SUBSTR (возраст, -2) из ​​таблицы;

1
Ajit Kumar 9 Дек 2014 в 10:21
Функция в Oracle substr не substring. Я не уверен, что оператор CASE что-то делает - почему бы не вызывать substr каждый раз? Я сомневаюсь, что вы получите какую-либо эффективность, вычисляя длину каждый раз, а не всегда беря последние два символа.
 – 
Justin Cave
8 Дек 2014 в 23:02

Вы можете попробовать это:

SELECT id, to_char(table1.age,'FM90') age FROM table1;  

Примечание. Приведенный выше запрос будет работать, только если table1.age слева будет добавлен 0, например:

021 или 0021 и так далее.

0
Aakanksha Shah 9 Дек 2014 в 14:02