簡體   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