2016-07-28 69 views
0

使用MS-SQL,PHP和JSON的组合,我在我的网页一列名为VendorAddress输出到浏览器这样的:SQLSRV更新查询删除空格

1111 THAT WAY DRIVE �TORRANCE 

那个奇怪的黑钻带有问号。

我已将范围缩小到某些用户正在从Excel复制和粘贴的事实,并且街道和城市之间还有一个额外的空间。我可以防止这种情况在将来发生。这是已经保存在桌子上的那些对我造成问题的人。

我发现MS-SQL数据库中有300多条记录有这个额外的空间。

我需要做的是编写一个查询,通过删除这个额外的空间来更新列。

UPDATE [main].[dbo].[suppliers] SET [VendorAddress] = '1111 THAT WAY DRIVE TORRANCE' WHERE [PartnerCode] = '00011144'; 

这是我所用,去备案记录有黑钻(336个)每个PartnerCode查询。我拒绝为此记录备案。我需要编写一个能够帮助我的查询。

我不知道如何去做这件事。我在网上找到的所有东西都告诉我使用TRIM,但它仅适用于尾随空格。这些不是尾随空格。他们在字符串内。

请帮我写一个查看整个表并从字符串中删除不必要的空格的查询。

预先感谢您。

**** ****编辑

特殊字符无法在数据库本身看到的。你唯一一次看到它是在PHP输出到浏览器的时候。

基本上,在表内,该字段包含一个额外的空间。表中无法看到黑钻石。

我希望这可以消除任何混淆。

+0

您的表中是否有'336'记录,或者只有'336'记录的字符不正确?如果你知道错误的字符,你应该可以使用'replace'。 https://msdn.microsoft.com/en-us/library/ms186862.aspx – chris85

+1

为什么不'更新..设置vendoraddress =替换(vendoraddress,' ','')'。无需做个人记录。只需在所有记录中将轨道上的角色核武。 –

+0

@MarcB - 我刚刚编辑了我的问题。黑钻在桌子本身是不可见的。 –

回答

0

好像你应该能够只是雇工替换功能:

UPDATE [main].[dbo].[suppliers] 
    SET [VendorAddress] = REPLACE(VendorAddress, '�', '') 

此命令似乎工作:

SELECT REPLACE('1111 THAT WAY DRIVE �TORRANCE', '�', '') 
+0

道歉 - 我刚刚更新了我的问题。黑色钻石在桌子内不可见。 –

+0

对我来说,它看起来可能显示为“?”。这可能仍然有效。 –

-1

用单个空格替换双空格使用以下命令:

UPDATE [main].[dbo].[suppliers] 
SET [VendorAddress] = replace([VendorAddress], ' ',' ') 
WHERE [VendorAddress] LIKE '% %' 

重复它直到你得到0行受到影响。

*编辑*

否则,您可以执行这个查询找出字符的代码?

select distinct cast([VendorAddress] AS varbinary) FROM [main].[dbo].[suppliers] WHERE [VendorAddress] LIKE '1111 THAT WAY DRIVE%TORRANCE' 
+0

它不是双空格,它是一个特定的不正确的字符。 – chris85

+0

试图使用上面的选择,但它没有返回任何记录。 –

+0

以下是否有效? (['1111 THAT DRIVE TORRANCE')[0126] [0] [0] [0] [0] [0] [0] AS varbinary)_ 我们可以得到不需要字符的十六进制代码。 还是不是? – Lucbert

0

你试过更新它吗?如果复制/粘贴不起作用,以下是捕获字形的一些代码。

DECLARE @Glyph CHAR(1); 

SELECT @Glyph = SUBSTRING([VendorAddress] 
          , -- Put numberic position of Glyph in string here 
          ,1) 
FROM [main].[dbo].[suppliers] 
WHERE [PartnerCode] = '00011144'; -- Record with erroneous Glyph 

SELECT @Glyph AS [Questionable Character] 
    , [VendorAddress] AS [Before] 
    , REPLACE([VendorAddress],@Glyph,'') AS [After] 
WHERE [PartnerCode] = '00011144'; -- Use same record as above.  

/* Uncomment out this bit when you know it works... 
UPDATE [main].[dbo].[suppliers] 
SET [VendorAddress] = REPLACE([VendorAddress],@Glyph,'') 
WHERE [VendorAddress] LIKE '%' + @Glyph + '%'; 
*/