簡體   English   中英

使用SQL刪除數據中的數值

[英]remove numeric values in data using sql

我的數據是:

Id       Case ID#
1.  QCCR1A105369, QCCR1A104986 ,QCCR1A103717
2.  QCIM1A106902,4613410733 QCIM1A106902; 4613344523 QCIM1A105842; 4614004212 QCIM1A106580; 4614060189 QCIM1A106676
3.  QCCR1D93616, QCCR1D92488, QCCR1D58461
4.  QCCR1B40216 .... ,QCCR1B39080, QCCR1B40216, QCCR1B39745, QCCR1B38463 , QCCR1B38618, QCCR1B38619, QCCR1B38620, QCCR1B38621, QCCR1B38622, QCCR1B38465, QCCR1B38623
5.  QCCR2A30221 QCCR2A30223 QCCR2A30222 QCIM2A30416

我的輸出將為Id 1,3,4,5 我只想要那些具有起始值QC行,而不是任何數值。 對於ID 2您可以看到一些數值,請告訴我如何實現。

您可以使用表值函數通過分隔符來分割值,如下所示:

CREATE FUNCTION [dbo].[Split]
(
    @ItemList NVARCHAR(MAX), 
    @delimiter CHAR(1)
)
RETURNS @ItemTable TABLE (Item VARCHAR(250))  
AS      

BEGIN    
    DECLARE @tempItemList NVARCHAR(MAX)
    SET @tempItemList = @ItemList

    DECLARE @i INT    
    DECLARE @Item NVARCHAR(4000)

    SET @i = CHARINDEX(@delimiter, @tempItemList)

    WHILE (LEN(@tempItemList) > 0)
    BEGIN
        IF @i = 0
            SET @Item = @tempItemList
        ELSE
            SET @Item = LEFT(@tempItemList, @i - 1)
        INSERT INTO @ItemTable(Item) VALUES(@Item)
        IF @i = 0
            SET @tempItemList = ''
        ELSE
            SET @tempItemList = RIGHT(@tempItemList, LEN(@tempItemList) - @i)
        SET @i = CHARINDEX(@delimiter, @tempItemList)
    END 
    RETURN
END  

然后此查詢返回預期結果:

SELECT t.*
FROM dbo.TableName t
WHERE NOT EXISTS
(
   SELECT 1 FROM dbo.Split(t.CaseID, ',') split
   WHERE NOT LEFT(LTRIM(split.Item), 2) = 'QC'
   OR ISNUMERIC(split.Item) = 1
) 

使用示例數據進行演示 但通常應避免在一列中包含多個值。 而是將其存儲在鏈接表的單獨行中。 這就是所謂的數據庫規范化

暫無
暫無

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

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