我正在从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]
尝试将LTRIM
与RTRIM
和LIKE
运算符一起使用以查找空间。让我举一个例子:
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