繁体   English   中英

搜索 SQL 服务器表列,只有多个前导和尾随空格

[英]Search SQL Server table column which has multiple leading and trailing spaces only

我正在从 SQL 服务器表中选择数据,该表具有前导空格字符(可能是一个、两个或更多),也有尾随空格(可能是一个、两个和更多)。

我使用LIKE ' %'搜索前导空格值,并使用LIKE '% '作为尾随空格记录,但显示的搜索结果仅返回只有一个空格作为前导/尾随空格的记录。 但我不确定记录中可用的数字空间。

这是我尝试过的查询:

SELECT [ColumName1], [ColumName], * 
FROM [table1]  
WHERE [ColumName] LIKE ' %' OR [ColumName] LIKE '% '

预期结果:

'   Testdata1', 'Test2  ', ' Test3','     Test4 '

但实际结果是:

'Test3 '

有一种更简单的方法可以做到这一点,而无需使用喜欢。 TRIM切断尾随空格,您可以使用它来过滤。 您在这里所做的是将每个[ColumName]的修剪版本与未修剪版本进行比较,并返回不同的版本。 这完成了你想要的。

select 
[ColumName1], [ColumName], * 
from  [table1]  
WHERE TRIM([ColumName]) <> [ColumName]

这将生成具有任何(一个或多个)尾随或前导空格的所有字段。

根据您的 SQL 服务器版本, TRIM可能不可用。 无论如何,也有解决方法:

select 
[ColumName1], [ColumName], * 
from  [table1]  
WHERE LTRIM([ColumName]) <> [ColumName]
OR RTRIM([ColumName]) <> [ColumName]

你可以试试这个

DECLARE @Temp_Table TABLE 
(
    ColumnName VARCHAR(100)
)

INSERT INTO @Temp_Table
VALUES
(' Test1'),
('  Test2'),
('Test3 '),
('Test4  '),
('Test5')

SELECT ColumnName
FROM  @Temp_Table  
WHERE (LEFT(ColumnName,1)=' ' OR RIGHT(ColumnName,1)=' ')

如果我没记错的话,SQL 服务器的LIKE允许字符集。 我们可以通过排除我们允许的字符(字母和数字)来使用它来查找控制和空白字符。 请试试:

SELECT * 
FROM [table1]  
WHERE [ColumName] LIKE '[^A-Za-z0-9]%' OR [ColumName] LIKE '%[^A-Za-z0-9]';

尝试将LTRIMRTRIMLIKE运算符一起使用来查找空格。 让我举个例子:

DECLARE @tbl TABLE 
(
    FooColumn VARCHAR(100)
)

INSERT INTO @tbl
VALUES
(' Example1'),
('  Example2'),
('Example3 '),
('Example4  '),
('Example5')

SELECT 
t.FooColumn
FROM  @tbl t  
WHERE RTRIM(t.FooColumn) LIKE '% %' OR LTRIM(t.FooColumn) LIKE '% %'

最后我发现列值已使用特殊的 ascii 值保存,因此在使用 LTRIM、RTRIM 时不会删除这些字符。

这工作: LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(plaincitation, CHAR(10), CHAR(32)),CHAR(13), CHAR(32)),CHAR(160), CHAR(32)),字符(9),字符(32))))

试试下面的答案。

在这里,我使用spacestabs插入值。 它会给我所有可能的结果。

架构:

CREATE TABLE A(ColumnName VARCHAR(100))

INSERT INTO A VALUES(' Test1')
INSERT INTO A VALUES('  Test2')
INSERT INTO A VALUES('Test3 ')
INSERT INTO A VALUES('Test4  ')
INSERT INTO A VALUES('Test5')

T-SQL:

SELECT * 
FROM A
WHERE ColumnName LIKE ' %' OR ColumnName LIKE '%    '
      OR ColumnName LIKE ' %' OR ColumnName LIKE '% '

检查SQL 小提琴中的结果

希望它能解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM