在数字字符串之前和之后查询空白空格

时间:2015-01-23 20:11:46

标签: sql sql-server sql-server-2012 whitespace removing-whitespace

enter image description here我将如何构建一个查询,该查询将返回在数字字符串之前或之后具有“空白空格”的所有材料编号?我们直接从SSMS导出到excel,我们在电子表格中看到了问题。如果我可以返回带有空格的所有材料编号..我可以进入并编辑它们或在导出之前进行替换以解决此问题! (mtrl号码是通过用户上传excel模板的Windows应用程序导入的。此模板包含所有这些数据,有时它们放在材料编号中或之后的空格中)。我们曾经使用过的查询,但现在它没有返回任何内容,但是在导出时我们会识别出您在屏幕截图中突出显示的这些问题(左侧屏幕截图),然后查询以查找表中的mtrl#(右侧屏幕截图) )。事实上,它在1之前有一个空间。

enter image description here

目前我们使用的查询如下:

SELECT  Mtrl
FROM dbo.Source
WHERE Mtrl LIKE '% %'

1 个答案:

答案 0 :(得分:1)

由于您是从查询中获取数据,因此您应该使用LTRIMRTRIM删除任何可能的空格:

LTRIM(RTRIM([MTRL]))

请注意,这两个命令只删除 空格,而不删除标签或返回或其他空白字符。

执行上述操作将确保整个数据集的数据正常,无论您是否找到它和/或进行修复。

或者,既然您要从结果网格中复制并粘贴到Excel中,您只需CONVERT该值就可以自然地删除任何空格:

SELECT CONVERT(INT, ' 12 ');

返回:

  

12

所以你只需要使用:

CONVERT(INT, [MRTL])

现在,如果你想找到任何不是数字的数据,你可以使用:

SELECT Mtrl
FROM   dbo.Source
WHERE  [Mtrl] LIKE '%[^0-9]%'; -- any single non-digit character

如果问题出在非空格空格字符上,您可以通过以下方法找出它们是哪些(要在开头而不是在结尾处找到它们,请将RIGHT更改为{ {1}}):

LEFT

你可以使用以下方法一次性修复,删除常规空格(通过;WITH cte AS ( SELECT UNICODE(RIGHT([MTRL], 1)) AS [CharVal] FROM dbo.Source ) SELECT * FROM cte WHERE cte.[CharVal] NOT BETWEEN 48 AND 57 -- digits 0 - 9 AND cte.[CharVal] <> 32; -- space / LTRIM获取char 32),制表符(char 9)和不间断空格(char 160) :

RTRIM

这里我使用了相同的WHERE条件,因为如果没有任何空格,那么如果你检查两端或者根本没有任何关系(也许更快的是有一个LIKE而不是两个)。