2012-02-20 82 views
4

我有一個具有多個固定長度字符字段的關係數據庫。我需要用-等其他字符永久替換所有嵌入空格,因此JOHN DOE將變爲JOHN-DOE和​​將變爲ITSY-BISTSY-SPIDER。我可以在手前進行搜索,以確保沒有可能發生衝突的字符串。我只需要能夠打印沒有嵌入空格的請求的文件。我會在C代碼中進行替換,但我想確保在數據庫中存在JANE DOEJANE-DOE這樣的未來情況。用另一個字符替換嵌入空格的SQL命令

順便說一句,我已經確保沒有多個連續的嵌入式空間或前導空格的字符串只能填充固定長度字段的尾部空格。

編輯:謝謝你的幫助!

它看起來像當我削減&粘貼我的問題從Word到StackOverflow的尾部空格丟失,所以我的問題的意思是失去了一點。

我需要只替換嵌入的空間而不是尾隨空格!

注意:我正在使用中點來代替顯示不好的空格。

使用:

SELECT REPLACE(operator_name, ' ', '-') FROM operator_info ; 

字符串JOHN·DOE············成爲JOHN-DOE------------。我需要JOHN-DOE············

我想我需要使用別名和TRIM命令,但不知道如何。

+1

你正在使用哪個數據庫系統,MySQL,SQL Server,Oracle? – 2012-02-20 17:17:56

+1

儘管在你的問題中用_永久性地說,請注意,如果你希望變化在任何時候都是可逆的,你應該選擇一個字段,這些字符在字段中不存在。否則你可能會失去信息。例如,如果你使用'-',那麼** Jean-Paul Sartre **就會成爲** Jean-Paul-Sartre **,如果你試圖扭轉它,你會得到** Jean Paul Sartre **這可能是不希望的。 – 2012-02-20 17:28:51

回答

0

假設的SQL Server:

update TABLE set column = replace (column, ' ','-') 
1

如果您正在使用MSSQL:

SELECT REPLACE(field_name,' ','-'); 

編輯:約跳過尾隨空格的要求後。 你可以嘗試這一個班輪:

SELECT REPLACE(RTRIM(@name), ' ', '-') + SUBSTRING(@name, LEN(RTRIM(@name)) + 1, LEN(@NAME)) 

不過我建議你把它放到一個用戶定義的函數。

+0

他們完全相同的功能用於MySQL – 2012-02-20 17:23:57

+0

感謝您的快速響應! 我打算用中點來更好地解釋我的請求 我只需要替換嵌入的空格而不是尾隨空格! 使用SELECT REPLACE(operator_name,'',' - ')FROM operator_info;字符串「JOHN•DOE••••••' 變成了'JOHN-DOE ------------'我需要'JOHN-DOE•••••' – user1221579 2012-02-20 20:03:30

+0

@ user1221579,答案根據您的編輯進行更新。 – 2012-02-21 15:37:14

6

無論您的特定數據庫中內置了哪種REPLACE函數。

的MySQL: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace

甲骨文: http://psoug.org/reference/translate_replace.html

的SQLServer:下面 http://msdn.microsoft.com/en-us/library/ms186862.aspx


編輯根據您的評論。

我已經在SQLServer語法中完成了這個工作,所以請根據需要修改示例。第一個例子真的打破了正在發生的事情,第二個例子將它整合爲一個醜陋的查詢:D

@output在這種情況下包含您的最終值。

DECLARE @input  VARCHAR (100) = ' some test '; 

DECLARE @trimmed VARCHAR (100); 
DECLARE @replaced VARCHAR (100); 
DECLARE @output VARCHAR (100); 

-- Get just the inner text without the preceding/trailing spaces. 
SET @trimmed = LTRIM (RTRIM (@input)); 

-- Replace the spaces *inside* the trimmed text with a dash. 
SET @replaced = REPLACE (@trimmed, ' ', '-'); 

-- Take the original text and replace the trimmed version (with the inner spaces) with the dash version. 
SET @output = REPLACE (@input, @trimmed, @replaced); 

-- Show each step of the process! 
SELECT @input AS INPUT, 
     @trimmed AS TRIMMED, 
     @replaced AS REPLACED, 
     @output AS OUTPUT; 

並作爲SELECT語句。

DECLARE @inputTable TABLE (Value VARCHAR (100) NOT NULL); 

INSERT INTO @inputTable (Value) 
VALUES (' some test '), 
     (' another test   '); 

SELECT REPLACE (Value, 
       LTRIM (RTRIM (Value)), 
       REPLACE (LTRIM (RTRIM (Value)), ' ', '-')) 
    FROM @inputTable; 
+0

感謝您的快速響應! 我打算用中點來更好地解釋我的請求 我只需要替換嵌入的空格而不是尾隨空格! 使用SELECT REPLACE(operator_name,'',' - ')FROM operator_info;字符串「JOHN•DOE•••••'' 變成了'JOHN-DOE ------------'我需要'JOHN-DOE•••••'' – user1221579 2012-02-20 20:03:03

+0

@ user1221579 I'包括一個簡單的例子,你應該能夠擴展到你需要的。如果您覺得這有幫助,請接受解決方案。 – Timeout 2012-02-20 21:48:50

+0

像所有好的解決方案一樣,在你看到它之後,它顯得很明顯 – user1221579 2012-02-21 02:39:31

0
SELECT REPLACE(field_name,' ','-'); 

編輯:約跳過尾隨空格的要求後。你可以試試這一行:

SELECT REPLACE(RTRIM(@name), ' ', '-') + SUBSTRING(@name, LEN(RTRIM(@name)) + 1; 
相關問題