Обновите последние две цифры varchar (22 BYTE) - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь понять, как изменить список чисел, заканчивающихся на 0230. Как бы я go просто изменил только две последние цифры.

Пример:

254541563200222200230

Into :
254541563200222200228

Example2:

11154561560222200230

Into : 
11154561560222200228

Мне известна команда выбора для поиска значений, которые заканчиваются этими числами, но не то, как их обновлять, поскольку у них у всех разные начальные числа. Все они 22 цифры в длину.

SELECT * from data_table here data = '%0230'.

Моя лучшая ставка была такой:

UPDATE data_table SET data = '%0229' where data = '%0230';

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Я пытаюсь выяснить, как изменить список чисел, заканчивающихся на 0230.

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

UPDATE data_table
SET data = data - 1
WHERE MOD( data, 10000 ) = 230;

Итак, для вашего примера данных:

CREATE TABLE data_table ( data ) AS
SELECT '254541563200222200230' FROM DUAL UNION ALL
SELECT '11154561560222200230' FROM DUAL;

Тогда после обновления значения будут:

SELECT * FROM DATA_TABLE;
| DATA                  |
| :-------------------- |
| 254541563200222200229 |
| 11154561560222200229  |

дБ <> скрипка здесь

0 голосов
/ 03 марта 2020

SUBSTR может сделать это.

Ваш второй пример короче первого, поэтому я немного изменил данные выборки; включенный y в конце, чтобы подчеркнуть 0230 (то есть последние 4 символа). Третий пример не следует изменять вообще, так как он не заканчивается на 0230 (это то, что делает where).

SQL> with test (col) as
  2    (select '2545415632002222y0230' from dual union all
  3     select 'x111545615602222y0230' from dual union all
  4     select '2412412412412412y1234' from dual
  5    )
  6  select col,
  7    substr(col, 1, length(col) - 2) || '28' result
  8  from test
  9  where substr(col, -4) = '0230';

COL
---------------------
RESULT
----------------------------------------------------------------
2545415632002222y0230
2545415632002222y0228

x111545615602222y0230
x111545615602222y0228


SQL>

Когда вы обновляете столбец, тогда :

SQL> create table test as
  2    (select '2545415632002222y0230' col from dual union all
  3     select 'x111545615602222y0230'     from dual union all
  4     select '2412412412412412y1234'     from dual
  5    );

Table created.

SQL> update test set
  2    col = substr(col, 1, length(col) - 2) || '28'
  3  where substr(col, -4) = '0230';

2 rows updated.

SQL> select * From test;

COL
---------------------
2545415632002222y0228
x111545615602222y0228
2412412412412412y1234

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...