删除电话号码中的尾随零

Ars*_*had 0 sql t-sql sql-server

我有一个旧的 Phone 表,其中有一个长度为 15 的 PhonoNo 列。现在我正在执行一项电话号码清理任务,其中 10 位数字后有尾随 0。

+----------------+---------------+
|    PhoneNo     | Desire output |
+----------------+---------------+
|198765432100000 |    1987654321 |
|   198765432100 |    1987654321 |
|     1987653210 |    1987653210 |
|    19876543210 |    1987654321 |
|198765432100100 | 1987654321001 |
|       19876543 |      19876543 |
|      009876543 |     009876543 |
+----------------+---------------+
Run Code Online (Sandbox Code Playgroud)

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

SELECT PhoneNo, REPLACE(LTRIM(REPLACE(PhoneNo,'0',' ')),' ','0') as NewPhoneNo 
FROM tblPhone WITH(NOLOCK) 
Run Code Online (Sandbox Code Playgroud)

我正在 SQL Server 中寻找一种解决方案来删除尾随 0 而无需创建任何函数。

Zho*_*rov 6

一个可能的选项是TRIM()函数(需要 SQL Server 2017+)。默认情况下,该TRIM()函数会从字符串的开头和结尾删除空格字符或其他指定字符,因此您需要#在正确的位置(第 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)
Run Code Online (Sandbox Code Playgroud)

结果:

PhoneNo
-------------
1987654321
1987654321
1987653210
1987654321
1987654321001
19876543
009876543
Run Code Online (Sandbox Code Playgroud)