我有一个自由形式的字符串字段,用户输入一组值。这使用户能够以任何方式输入信息,但也会出现格式不一致的情况。出于数据清理的目的,我想将字符串格式化为标准,无论它们如何输入。例如,我有以下数据集。注意如何以各种格式输入冒号。
Description
---------------------------
ARCHIVE PERSONNEL FOLDERS : INACTIVE
ACTIVE PERSONNEL FOLDERS: ACTIVE
ACTIVE AUDIT FOLDERS :ACTIVE
UNKNOWN AUDIT FOLDERS:ACTIVE
ABC CLIENT FOLDERS : INACTIVE
DEF CLIENT FOLDERS : ACTIVE
我想格式化字符串,以便冒号立即附加到它之前的单词,并且后面有一个空格。
Description
---------------------------
ARCHIVE PERSONNEL FOLDERS: INACTIVE
ACTIVE PERSONNEL FOLDERS: ACTIVE
ACTIVE AUDIT FOLDERS: ACTIVE
UNKNOWN AUDIT FOLDERS: ACTIVE
ABC CLIENT FOLDERS: INACTIVE
DEF CLIENT FOLDERS: ACTIVE
根据需要格式化数据的最佳方法是什么,并考虑任何不正确的冒号格式(前面的空格,没有空格,前后空格,前面两个空格等)?
答案 0 :(得分:3)
无论冒号前后的空格数是多少,这都应该有效
declare @table table([Description] varchar(256))
insert into @table
values
('ARCHIVE PERSONNEL FOLDERS : INACTIVE'),
('ACTIVE PERSONNEL FOLDERS: ACTIVE'),
('ACTIVE AUDIT FOLDERS :ACTIVE'),
('UNKNOWN AUDIT FOLDERS:ACTIVE'),
('ABC CLIENT FOLDERS : INACTIVE'),
('DEF CLIENT FOLDERS : ACTIVE')
select
[Description]
,rtrim(substring([Description],0,CHARINDEX(':',[Description]))) + ': ' + ltrim(substring([Description],CHARINDEX(':',[Description])+1,len([Description])))
from
@table
答案 1 :(得分:1)
<强>假设:强>
在提出这个答案时我做了几个假设。如果这些假设无效,可以采用这些假设的解决方法,但认为最好从最简单的方案开始。
1)在自由形式字符串字段中永远不会输入.
。
2)自由形式字符串字段中不会包含多个:
。
示例数据设置:
declare @table table
(
description varchar(100) not null
)
insert into @table
values ('ARCHIVE PERSONNEL FOLDERS : INACTIVE')
, ('ACTIVE PERSONNEL FOLDERS: ACTIVE')
, ('ACTIVE AUDIT FOLDERS :ACTIVE')
, ('UNKNOWN AUDIT FOLDERS:ACTIVE')
, ('ABC CLIENT FOLDERS : INACTIVE')
, ('DEF CLIENT FOLDERS : ACTIVE')
<强>答案:强>
就像Lewis Therin在问题评论中所说,REPLACE
在这里非常有用。它将有助于为记录的目的外部设置,但可靠地使用名为parsename的函数。
下面的select语句根据:
的位置将每个字符串拆分为两个,从每个字符串中删除任何多余的空格,然后将它们与指定的:
连接在一起。 (他们之间有空格冒号)。
select rtrim(ltrim(parsename(replace(t.description, ':', '.'), 2))) + ': ' + rtrim(ltrim(parsename(replace(t.description, ':', '.'), 1))) as description
from @table as t
<强>结果:强>
Description
-------------------------------------
ARCHIVE PERSONNEL FOLDERS: INACTIVE
ACTIVE PERSONNEL FOLDERS: ACTIVE
ACTIVE AUDIT FOLDERS: ACTIVE
UNKNOWN AUDIT FOLDERS: ACTIVE
ABC CLIENT FOLDERS: INACTIVE
DEF CLIENT FOLDERS: ACTIVE