2012-02-20 38 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; 
相关问题