簡體   English   中英

SQL - 如何從字符串中刪除空格字符

[英]SQL - How to remove a space character from a string

我有一個表,其中列(varchar)的最大長度為 12,有人用空格加載了一些值,所以不是“SPACE”而是“SPACE”

我想使用腳本刪除空格,我認為 RTRIM 或 REPLACE(myValue, ' ', '') 會起作用,但 LEN(myValue) 顯示還有額外的字符?

正如幾個人所提到的,它可能不是一個空間。 獲取 ngrams8k的副本,然后使用它來識別問題。 例如,這里有文本“SPACE”,前面有空格,后面有 CHAR(160)(HTML BR 標記)。 CHAR(160) 看起來像 SSMS 中的空格,但不是“可修剪的”。 例如考慮這個查詢:

DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);
SELECT '"'+@string+'"'

使用ngrams8k你可以這樣做:

DECLARE @string VARCHAR(100) = ' SPACE'+CHAR(160);

SELECT
  ng.position,
  ng.token,
  asciival = ASCII(ng.token)
FROM   dbo.ngrams8k(@string,1) AS ng;

回報:

position   token   asciival
---------- ------- -----------
1                  32
2          S       83
3          P       80
4          A       65
5          C       67
6          E       69
7                  160

如您所見,第一個字符(位置 1)是 CHAR(32),這是一個空格。 最后一個字符(第 7 位)不是空格。 知道 CHAR(160) 是問題,您可以像這樣修復它:

SET @string = REPLACE(LTRIM(@string),CHAR(160),'')

如果您使用的是 SQL Server 2017+,您還可以使用TRIM ,它的功能遠不止 LTRIM-and-RTRIM-ing。 例如,這將刪除前導和尾隨制表符、空格、回車、換行和 HTML BR 標簽。

SET @string = SELECT TRIM(CHAR(32)+CHAR(9)+CHAR(10)+CHAR(13)+CHAR(160) FROM @string)

奇怪的是它是其他一些非打印字符,當從 *nix 和其他操作系統之間移動時,回車是一個很大的字符。 一種判斷方法是使用 DUMP function。 因此,您可以從如下查詢開始:

SELECT dump(column_name)
FROM your_table
WHERE column_name LIKE 'SPACE%'

這應該可以幫助您找到有問題的角色,但是,這並不能解決您的問題。 相反,我會使用類似 REGEXP_REPLACE 的東西:

SELECT REGEXP_REPLACE(column_name, '[^A-z]')
FROM your_table

那應該照顧任何非打印字符。 如果您希望字符串中有數字或符號,則可能需要使用正則表達式。 您可以切換到一個字符 class ,例如:

SELECT REGEXP_REPLACE(column_name, '[:cntrl:]')
FROM your_table

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM