Я хочу заменить Год на все 2000, но не смог заменить Год - PullRequest
0 голосов
/ 06 ноября 2019

Я пытался использовать этот запрос

UPDATE people
   SET BIRTHDATE = replace (BIRTHDATE, '%:00 2%' ,'%:00 2000')
 WHERE BIRTHDATE IN (select birthdate from people)

текущие данные

BIRTHDATE
Mon Jan 27 00:00:00 **2020**
Mon Jan 27 00:00:00 **2130**
Mon Jan 27 00:00:00 **1920**

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Используйте простые строковые функции:

Установка Oracle :

CREATE TABLE crm_customer_data ( birthdate ) AS
SELECT 'Mon Jan 27 00:00:00 2020' FROM DUAL UNION ALL
SELECT 'Mon Jan 27 00:00:00 2130' FROM DUAL UNION ALL
SELECT 'Mon Jan 27 00:00:00 1920' FROM DUAL UNION ALL
SELECT 'Mon Jan 27 00:00:00 2020' FROM DUAL;

Обновление :

UPDATE crm_customer_data
SET    BIRTHDATE = SUBSTR( BIRTHDATE, 1, LENGTH( BIRTHDATE ) - 4 ) || '2000'
-- WHERE  BIRTHDATE IN (select birthdate from people)
-- AND    BIRTHDATE LIKE '%2___'

Выход :

SELECT * FROM  crm_customer_data
| BIRTHDATE                |
| :----------------------- |
| Mon Jan 27 00:00:00 2000 |
| Mon Jan 27 00:00:00 2000 |
| Mon Jan 27 00:00:00 2000 |
| Mon Jan 27 00:00:00 2000 |

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

0 голосов
/ 06 ноября 2019

Если birthdate является строкой, и вы хотите заменить 4 крайние правые цифры, которые начинаются с '2', на '2000', решение состоит в использовании regexp_replace():

update crm_customer_data
set birthdate = regexp_replace(birthdate, '2\d{3}$' ,'2000')

Regexpподробно:

2       the number '2'
\d{3}   3 digits
$       end of the string

Без примеров данных неясно, какова цель условия in с подзапросом, поэтому я пока оставил его отдельно.

Демонстрация по БД Fiddle :

select regexp_replace('Mon Jan 27 00:00:00 2020', '2\d{3}$', '2000') from dual
| REGEXP_REPLACE('MONJAN2700:00:002020','2\D{3}$','2000') |
| :------------------------------------------------------ |
| Mon Jan 27 00:00:00 2000                                |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...