我有一个表的EmailAddress列包含空格。我执行了一个批量更新来删除所有空格,它对大多数记录都有效。我随机检查,其中一个电子邮件地址的末尾有一个空格(第32个字符),但没有被删除。我尝试了很多方法,但没有成功。
下面是我的成批更新查询:
Update ContactTable
SET EmailAddress = REPLACE(EmailAddress, ' ', '')
对于末尾有空格的电子邮件地址,我将其复制并粘贴到下面的查询中,列出所有带有ASCII数字的字符,看看它是否真的是第32个字符。
DECLARE @YourString varchar(500)
SELECT @YourString='dept.com '
;WITH AllNumbers AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number+1
FROM AllNumbers
WHERE Number<DATALENGTH(@YourString)
)
SELECT SUBSTRING(@YourString,Number,1) AS CharText,ASCII(SUBSTRING(@YourString,Number,1)) AscNum, Number
, case when SUBSTRING(@YourString,Number,1) like '[ ]%'
THEN 'y'
ELSE 'n'
END SpaceFound
FROM AllNumbers
-------------------------------------------------
Output Result (# 9 is the Char 32):
CharText AscNum Number SpaceFound
d 100 1 n
e 101 2 n
p 112 3 n
t 116 4 n
. 46 5 n
c 99 6 n
o 111 7 n
m 109 8 n
32 9 y
我尝试了这个更新查询,它也不工作:
Update ContactTable
SET EmailAddress = REPLACE(EmailAddress, char(32), '')
当然,我可以手动删除这个特定记录的尾随空格,但可能还有更多类似的记录。
更新:我甚至尝试使用下面的这个函数来替换,但也没有工作:
ALTER FUNCTION [dbo].[TRIM](@string VARCHAR(MAX))
RETURNS VARCHAR(MAX)
BEGIN
--Horizontal Tab
Set @string = Replace(@string,CHAR(9),'');
--Line Feed
Set @string = Replace(@string,CHAR(10),'');
--Vertical Tab
Set @string = Replace(@string,CHAR(11),'');
--Form Feed
Set @string = Replace(@string,CHAR(12),'');
--Carriage Return
Set @string = Replace(@string,CHAR(13),'');
--Column Break
Set @string = Replace(@string,CHAR(14),'');
--Non-breaking space
Set @string = Replace(@string,CHAR(160),'');
Set @string = LTRIM(RTRIM(@string));
Return @string
END
Update ContactTable
SET EmailAddress = dbo.Trim(EmailAddress)
有什么建议吗?先谢了。
3条答案
按热度按时间332nm8kg1#
使用length(LEN)函数确定手动删除多余空格前后是否有任何更改。如果长度有更改,则可以尝试使用它来确定具有提取空格的电子邮件地址。
ia2d9nvy2#
函数
len
使用字符串的数量,而datalenght
使用位的数量clj7thdc3#
CHAR(32)
是一个有趣的字符。如果它出现在字符串的末尾,SQL Server将直接忽略它。将返回
TRUE
,但这只是因为该字符位于字符串末尾。将(如预期)返回
FALSE
。计算长度也会受到影响。
LEN(CHAR(32))
返回0
,但DATALENGTH(CHAR(32))
返回1
。