簡體   English   中英

如何在ORACLE中選擇SUBSTRING

[英]How Select SUBSTRING in ORACLE

我需要選擇一個subtring才能從表字段中獲取連續的數字。 我的桌子是:

ORDER_NUM       ORDER_DATE   ORDER_TYPE  LOCATION   SALE_TYPE
10501702315618  08/01/17       43223       1050        18    
105017023186230 21/01/17       43221       1050        230

字段ORDER_NUM的生成如下

[LOCATION] + [YY] + [CONSECUTIVE_NUMBER] + [SALE_TYPE]

LOCATION和SALE_TYPE字段的長度可以不同。因此,我的查詢是:

SELECT 
SUBSTR(ORDER_NUM,LENGTH (ORDER_TYPE)  + 3,LENGTH (ORDER_NUM)   - LENGTH ( SALE_TYPE ) ),
ORDER_DATE
FROM 
CAT_ORDERS
WHERE 
LOCATION = '1050'
AND SALE_TYPE = '18'

結果是

    SELECT SUBSTR('10501702315618',7,12) from dual
    RESULT: 02315618

索引位置在哪里:

 12345678901234
 10501702315618

我如何從字符串中刪除SALE_TYPE字符? 還有另一個功能嗎?

謝謝!

您的描述是針對位置的,因此您的抵消額是基於訂單類型的,這很奇怪。 子字符串的長度也需要排除位置的長度和年份:

SUBSTR(ORDER_NUM, LENGTH (LOCATION) + 3,
  LENGTH (ORDER_NUM) - LENGTH(LOCATION) - 2 - LENGTH (SALE_TYPE))

目前,您將從偏移量中獲取12個字符,而當您只需要6個字符時,實際上只有8個可用字符。

演示數據:

WITH CAT_ORDERS (ORDER_NUN, ORDER_DATE, ORDER_TYPE, LOCATION, SALE_TYPE) AS (
  SELECT 10501702315618, TO_DATE('08/01/17', 'DD/MM/RR'), 43223, 1050, 18 FROM DUAL
  UNION ALL SELECT 105017023186230, TO_DATE('21/01/17', 'DD/MM/RR'), 43221, 1050, 230 FROM DUAL
)
SELECT SUBSTR(ORDER_NUM, LENGTH (LOCATION) + 3,
  LENGTH (ORDER_NUM) - LENGTH(LOCATION) - 2 - LENGTH (SALE_TYPE))
FROM CAT_ORDERS;

023156
023186

您的訂單號重復了其他列中的數據,這似乎並不理想。 僅存儲“連續編號”部分,並生成完整的訂單編號作為虛擬列會更簡單。

這應該從最后刪除sale_type字符:

select 
  substr(substr(order_num, 0, length(order_num)-length(sale_type)), length(location) + 3)
from t;
select  regexp_substr(ORDER_NUM,'^' || LOCATION || '..(.*)' || SALE_TYPE || '$',1,1,'',1)
from    mytable;

既然我們知道consecutive_number的長度是固定的(即6):

select  regexp_substr(ORDER_NUM,'^' || LOCATION || '..(.{6})',1,1,'',1)
from    mytable;

要么

select  regexp_substr(ORDER_NUM,'(.{6})' || SALE_TYPE || '$',1,1,'',1)
from    mytable;

既然我們知道consecutive_number的長度是固定的(即6):

select  substr(ORDER_NUM,length(LOCATION)+3,6)
from    mytable;

要么

select  substr(ORDER_NUM,-length(SALE_TYPE)-6,6)
from    mytable;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM