[英]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 个字符的值,然后使用REPLACE
和RTRIM
删除尾随的 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.