簡體   English   中英

在SQL中刪除字符串中的字符

[英]Remove Characters in a String in SQL

我有一列u_manualdoc,其中包含類似於CGY DR# 7405 我想刪除CGY DR# 這是代碼:

select u_manualdoc, cardcode, cardname from ODLN

我只想要7405號。 謝謝!

嘗試這個:

--sample data you provided in comments
declare @tbl table(codes varchar(20))
insert into @tbl values
('CGY PST - 58277') , ('CGY RMC PST # 58083'), ('CGY DR # 7443'), ('CSI # 1304'), ('PO# 0568 , 0570'), ('CGY DR# 7446')

--actual query that you can apply to your table
select SUBSTRING(codes, PATINDEX('%[0-9]%', codes), len(codes)) from @tbl

這里的關鍵點是使用patindex ,它搜索一個模式並在出現這種模式的地方返回索引。 我指定了%[0-9]% ,這意味着我們搜索任何數字-它會返回數字的第一個出現位置。 現在-由於這是我們開始創建子字符串的起點,因此將其傳遞給此類函數。 substring第三個參數是長度。 由於我們需要字符串的其余部分,因此len函數確保我們得到了:)

適用於您的命名:

select SUBSTRING(u_manualdoc, PATINDEX('%[0-9]%', u_manualdoc), len(u_manualdoc)),
       cardcode,
       cardname
from ODLN

您應該使用字符串函數charindex,len和substring來獲取它。 請參見下面的代碼。

select SUBSTRING(u_manualdoc,CHARINDEX('#',u_manualdoc)+1,LEN(u_manualdoc)- CHARINDEX('#',u_manualdoc))

編輯

除了其他答案,您還可以使用以下簡單方法:

select
    substring(
        u_manualdoc,
        len(u_manualdoc) - patindex('%[^0-9]%', reverse(u_manualdoc)) + 2,
        len(u_manualdoc)
    ),
    cardcode, cardname
from ODLN

在此示例中, patindex從字符串的右側找到第一個非數字(由^[0-9]指定),然后將其用作子字符串的起點。

這將適用於所有示例字符串(包括“ PO#0568、0570 CGY DR#7446”)。

或使用SQL Server Regex ,它使您可以在查詢中使用更強大的正則表達式。

嘗試這個

DECLARE @table TABLE(DirtyCol VARCHAR(100));
INSERT INTO @table
VALUES('AB ABCDE # 123'), ('ABCDE# 123'), ('AB: ABC# 123 AB: ABC# 123'), ('AB#'), ('AB # 1 000 000'), ('AB # 1`234`567'), ('AB # (9)(876)(543)');
WITH tally
     AS (
     SELECT TOP (100) N = ROW_NUMBER() OVER(ORDER BY @@spid)
     FROM sys.all_columns),
     data
     AS (
     SELECT DirtyCol,
            Col
     FROM @table
          CROSS APPLY
(
    SELECT
(
    SELECT C+''
    FROM
(
    SELECT N,
           SUBSTRING(DirtyCol, N, 1) C
    FROM tally
    WHERE N <= DATALENGTH(DirtyCol)
) [1]
    WHERE C BETWEEN '0' AND '9'
    ORDER BY N FOR XML PATH('')
)
) p(Col)
     WHERE p.Col IS NOT NULL)
     SELECT DirtyCol,
            CAST(Col AS INT) IntCol
     FROM data;

暫無
暫無

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

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