簡體   English   中英

T-SQL查詢以識別由單個重復字符/數字組成的varchar字段?

[英]T-SQL Query to identify varchar fields that consist of a single repeating char/digit?

我需要清理存儲為varchar的電話號碼。 存在不良數據,其中未知電話號碼被存儲為單個數字的序列。 最終會完成更復雜的(區域代碼和前綴匹配)但我想簡單查詢明顯不好的記錄。

例如:

有效電話號碼:3289903829

電話號碼無效:1111111111

現在,如果偽造的產品ID是合適的長度(10位數),則很容易解析和清理。

    SELECT phone
    FROM customers 
    SET phone = NULL 
    WHERE phone IN ('0000000000','9999999999',''8888888888','7777777777','6666666666','5555555555','4444444444','3333333333','2222222222','1111111111') 

然而,有時假電話是任意長度的(可能是由於拼寫錯誤)所以11個或9個,或n個。
如何識別包含所有相同字符/數字的字符串?

1111111 - match
4444 - match
1112 - no match
4445555 - no match 

您可以獲取第一個字符並復制它:

where phone = replicate(left(phone,1), len(phone))
    and phone is not null

根據您運行所需的速度,您的另一個選擇是填充臨時表,然后在其上加入您的電話號碼。 如果你多次這樣做,你甚至可以創建一個真正的表,這樣你就不必每次運行都重新創建它。 為了加快速度,您還可以索引該字段。 您的里程數可能會因您需要的速度而有所不同,以便與您需要比較的記錄數量進行比較。

CREATE TABLE #Numbers
(
    PhoneNumber VARCHAR(13) NOT NULL
)

DECLARE @run BIT
SET @run = 1

DECLARE @number INT
SET @number = 1

DECLARE @Counter INT 
SET @Counter = 1

WHILE(@run = 1)
BEGIN 

WHILE(@Counter < 13)
BEGIN 
    INSERT INTO #Numbers
    SELECT REPLICATE(@number,@counter)

    SET @Counter = @Counter + 1
END


SET @Counter = 1
SET @number = @number + 1

IF(@number > 9)
BEGIN 
    SET @run = 0
END

END

SELECT * FROM Phone p JOIN #numbers n ON p.PhoneNumber = n.PhoneNumber

這樣您就不必重新計算每次比較數字的字段。

也許您可以創建一個SQL函數來執行此操作。

我認為它的內容看起來像這樣:

DECLARE @field varchar(10) 
SET @field = '11111'

DECLARE @len INT
SET @len = LEN(@field)

DECLARE @counter INT
SET @counter = 1

DECLARE @firstChar VARCHAR(1)
SET @firstChar = NULL

DECLARE @currentChar VARCHAR(1)
SET @currentChar = NULL

DECLARE @allSameNumber BIT
SET @allSameNumber = 1

WHILE @counter <= @len AND @allSameNumber = 1 BEGIN

    SET @currentChar = SUBSTRING(@field,@counter,1) 
    IF @firstChar IS NULL BEGIN
        SET @firstChar = @currentChar
    END 
    IF NOT ISNUMERIC(@currentChar) = 1 OR NOT @currentChar = @firstChar BEGIN
        SET @allSameNumber = 0
    END
    SET @counter = @counter + 1

END

SELECT @allSameNumber

暫無
暫無

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

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