搜索SQL Server表列,该列仅包含多个前导空格和尾部空格



我正在从SQL Server表中选择数据,该表具有前导空格字符(可以是一个、两个或多个(,也具有尾随空格字符(可能是一个或两个以上(。

我用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 Server版本,TRIM可能不可用。不管怎样,也有一个变通办法:

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

尝试将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 '% %'

你可以试试这个,

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 Server的LIKE允许使用字符集。通过排除允许的字符(字母和数字(,我们可以使用它来查找控制字符和空白字符。请尝试:

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

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

这起到了作用:LTRIM(RTRIM(REPLACE

最新更新