簡體   English   中英

從電話號碼中刪除尾隨零

[英]Remove trailing zeros from phone number

我有一個舊的電話表,其中有一個長度為 15 的 PhonoNo 列。現在我正在處理電話號碼清理任務,在 10 位數字后使用尾隨 0。

+----------------+---------------+
|    PhoneNo     | Desire output |
+----------------+---------------+
|198765432100000 |    1987654321 |
|   198765432100 |    1987654321 |
|     1987653210 |    1987653210 |
|    19876543210 |    1987654321 |
|198765432100100 | 1987654321001 |
|       19876543 |      19876543 |
|      009876543 |     009876543 |
+----------------+---------------+

我正在使用下面的代碼,但它對我不起作用。

SELECT PhoneNo, REPLACE(LTRIM(REPLACE(PhoneNo,'0',' ')),' ','0') as NewPhoneNo 
FROM tblPhone WITH(NOLOCK) 

我正在 SQL 服務器中尋找解決方案,以在不創建任何 function 的情況下刪除尾隨 0。

一個可能的選項是TRIM() function。 默認情況下, TRIM() function 從字符串的開頭和結尾刪除空格字符或其他指定字符,因此您需要在正確的位置(第 1 和第 10)放置一個附加字符(示例中的# )並將其刪除在那之后:

SELECT 
   REPLACE(
      TRIM('0' FROM '#' + SUBSTRING(PhoneNo, 1, 10) + '#' + SUBSTRING(PhoneNo, 11, 5)),
      '#',
      ''
   ) AS PhoneNo   
FROM (VALUES
   ('19876543210000'),
   ('198765432100'),
   ('1987653210'),
   ('19876543210'),
   ('198765432100100'),
   ('19876543'),
   ('009876543')
) t (PhoneNo)

結果:

PhoneNo
-------------
1987654321
1987654321
1987653210
1987654321
1987654321001
19876543
009876543

您可以使用CASE表達式原樣返回小於或等於 10 個字符的值,然后使用REPLACERTRIM刪除尾隨的 0:

SELECT CASE WHEN LEN(PhoneNo) <= 10 THEN PhoneNo
            ELSE REPLACE(RTRIM(REPLACE(PhoneNo,'0',' ')),' ','0')
       END
FROM (VALUES ('198765432100000'),
             ('198765432100'),
             ('1987653210'),
             ('19876543210'),
             ('198765432100100'),
             ('19876543'),
             ('009876543'))V(PhoneNo);

您可以使用字符串函數LEFT PATINDEX REVERSE的組合,如下所示:

SELECT PhoneNo, 
       Left(PhoneNo, 
            IIF(Len(PhoneNo)-PATINDEX('%[1-9]%',Reverse(PhoneNo))+1<=10 Or PhoneNo Like '%[^1-9]%', 
                10,
                Len(PhoneNo)-PATINDEX('%[1-9]%', Reverse(PhoneNo))+1)) As NewPhoneNo 
FROM tblPhone

Output:

PhoneNo              NewPhoneNo
-------------------- --------------------
19876543210000       1987654321
198765432100         1987654321
1987653210           1987653210
19876543210          1987654321
198765432100100      1987654321001
19876543             19876543
009876543            009876543

或更短:

SELECT IIF(LEN(PhoneNo) <= 10, PhoneNo, REPLACE(RTRIM(REPLACE(PhoneNo, '0', ' ')), ' ', '0'))

[這是基於拉努的回答]

暫無
暫無

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

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