我有一个包含空格的EmailAddress列表。我执行了批量更新以删除所有空格,它适用于大多数记录。我随机检查,其中一个电子邮件地址最后有一个空格(字符32),但没有删除。我尝试了很多东西,但没有用。
这是我的批量更新查询:
Update ContactTable
SET EmailAddress = REPLACE(EmailAddress, ' ', '')
对于末尾有空格的电子邮件地址,我在下面的查询中复制并粘贴它,以列出所有带有Ascii数字的字符,以查看它是否真的是Char 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)
有什么建议吗?提前谢谢。
答案 0 :(得分:0)
使用长度(LEN)功能确定手动移除额外空间之前和之后是否有任何更改。如果长度发生变化,您可以尝试使用它来确定带有提取空间的电子邮件地址。
答案 1 :(得分:0)
函数len
使用字符串的金额字符,而datalenght
使用位数
答案 2 :(得分:0)
CHAR(32)
是一个有趣的人物。如果它出现在字符串的末尾,则SQL Server只会忽略它。
SELECT CASE WHEN 'ABC' = 'ABC' + CHAR(32) THEN 'TRUE' ELSE 'FALSE' END;
将返回TRUE
,但这仅是因为该字符位于字符串的末尾。
SELECT CASE WHEN 'ABC' = CHAR(32) + 'ABC' THEN 'TRUE' ELSE 'FALSE' END;
(按预期)将返回FALSE
。
计数长度也会受到影响。 LEN(CHAR(32))
返回0
,但是DATALENGTH(CHAR(32))
返回1
。