将TAB_A 表为主表,字段TRAN_CODE 数据为”A0083***0001”等,通过字段TRAN_CODE与 TAB_B表中字段DI_CODE关联,但B表中DI_CODE的数据可能存在”B0083***0001”,”b0083***0001”等,需要将TAB_B表中的”b0083***0001”先转化成”B0083***0001”,再将”B0083***0001”转化成”A0083***0001”,这个SQL怎么实现?
时间: 2023-07-23 18:07:59 浏览: 80
可以使用 SQL 的字符串函数来实现该需求,具体的 SQL 语句如下:
```
UPDATE TAB_B
SET DI_CODE = REPLACE(REPLACE(DI_CODE, 'b', 'B'), 'B', 'A')
WHERE DI_CODE LIKE 'b0083%' ESCAPE '|'
AND EXISTS (
SELECT * FROM TAB_A
WHERE TRAN_CODE = REPLACE(REPLACE(DI_CODE, 'b', 'B'), 'B', 'A')
);
```
上述 SQL 语句中,使用了 REPLACE 函数将小写字母 b 转化为大写字母 B,然后再将 B 转化为 A,以实现将 TAB_B 表中的 DI_CODE 字段值转化为对应的 TRAN_CODE。同时,使用了 LIKE 操作符对 DI_CODE 进行模糊匹配,并指定 ESCAPE 字符为竖线 |,以避免 LIKE 操作符中的通配符 % 被误认为是转义字符。最后,使用 EXISTS 子查询来判断对应的 TRAN_CODE 是否存在于 TAB_A 表中,若存在则更新 TAB_B 表中的 DI_CODE 字段值。
相关问题
将TAB_A 表为主表,字段TRAN_CODE 数据为”A0083***0001”等,TAB_A表通过字段TRAN_CODE与 TAB_B表中字段DI_CODE关联,但B表中DI_CODE的数据可能存在”B0083***0001”,”b0083***0001”等,需要将TAB_B表中的”b0083***0001”先转化成”B0083***0001”,再将”B0083***0001”转化成”A0083***0001”,这个SQL怎么实现?
可以使用以下SQL语句实现:
```
UPDATE TAB_B
SET DI_CODE = REPLACE(DI_CODE, 'b', 'B')
WHERE DI_CODE LIKE 'b0083%';
UPDATE TAB_B
SET DI_CODE = REPLACE(DI_CODE, 'B', 'A')
WHERE DI_CODE LIKE 'B0083%';
SELECT *
FROM TAB_A
INNER JOIN TAB_B
ON TAB_A.TRAN_CODE = TAB_B.DI_CODE;
```
第一条UPDATE语句将TAB_B表中DI_CODE字段中以"b0083"开头的数据中的"b"替换为"B",将其转化为"B0083***0001"格式。
第二条UPDATE语句将TAB_B表中DI_CODE字段中以"B0083"开头的数据中的"B"替换为"A",将其转化为"A0083***0001"格式。
最后一条SELECT语句是将TAB_A表和TAB_B表通过TRAN_CODE和DI_CODE字段关联起来,得到结果。
根据以下字段生成oracle建表语句:appg_mode|appg_date|tran_code|bancs_no|rgnbnk|tran_cusm_no|tran_date|inct_rec_no|rec_no|prov_br_no|acct_no|tran_acct_type
根据以下字段生成的Oracle建表语句如下:CREATE TABLE T_TRANS_INFO(appg_mode VARCHAR2(20) NOT NULL,appg_date DATE NOT NULL,tran_code VARCHAR2(20) NOT NULL,bancs_no VARCHAR2(20) NOT NULL,rgnbnk VARCHAR2(20) NOT NULL,tran_cusm_no VARCHAR2(20) NOT NULL,tran_date DATE NOT NULL,inct_rec_no VARCHAR2(20) NOT NULL,rec_no VARCHAR2(20) NOT NULL,prov_br_no VARCHAR2(20) NOT NULL,acct_no VARCHAR2(20) NOT NULL,tran_acct_type VARCHAR2(20) NOT NULL);
阅读全文