Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 有条件地格式化不一致的用户输入字符串_Sql Server_Tsql - Fatal编程技术网

Sql server 有条件地格式化不一致的用户输入字符串

Sql server 有条件地格式化不一致的用户输入字符串,sql-server,tsql,Sql Server,Tsql,我有一个自由形式的字符串字段,用户在其中输入一组值。这使用户能够以任何方式输入信息,但也会导致格式不一致。出于数据清理的目的,我希望将字符串格式化为标准格式,而不管它们是如何输入的。例如,我有以下一组数据。请注意冒号是如何以各种格式输入的 Description --------------------------- ARCHIVE PERSONNEL FOLDERS : INACTIVE ACTIVE PERSONNEL FOLDERS: ACTIVE ACTIVE AUDIT FOLDERS

我有一个自由形式的字符串字段,用户在其中输入一组值。这使用户能够以任何方式输入信息,但也会导致格式不一致。出于数据清理的目的,我希望将字符串格式化为标准格式,而不管它们是如何输入的。例如,我有以下一组数据。请注意冒号是如何以各种格式输入的

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

根据需要格式化数据并解释任何形式的冒号格式错误的最佳方法是什么?

无论冒号前后有多少空格,都应该这样做

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

无论冒号前后有多少空格,这都应该有效

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
假设:

在给出这个答案时,我做了一些假设。如果这些假设无效,可以采取变通办法,但我认为最好从最简单的场景开始

永远不会有一个新的世界。在自由格式字符串字段中输入

2自由格式字符串字段中包含的:永远不会超过一个

示例数据设置:

答复:

正如刘易斯·瑟林在对问题的评论中所说,替换在这里非常有用。它将有助于为所调用的函数的使用设置一个超出文档目的但可靠的用途

下面的select语句根据:is的位置将每个字符串拆分为两个,从每个字符串中删除任何额外的空格,然后使用指定的:冒号将它们重新连接在一起,并在它们之间留有空格

select rtrim(ltrim(parsename(replace(t.description, ':', '.'), 2))) + ': ' + rtrim(ltrim(parsename(replace(t.description, ':', '.'), 1))) as description
from @table as t
结果:

假设:

在给出这个答案时,我做了一些假设。如果这些假设无效,可以采取变通办法,但我认为最好从最简单的场景开始

永远不会有一个新的世界。在自由格式字符串字段中输入

2自由格式字符串字段中包含的:永远不会超过一个

示例数据设置:

答复:

正如刘易斯·瑟林在对问题的评论中所说,替换在这里非常有用。它将有助于为所调用的函数的使用设置一个超出文档目的但可靠的用途

下面的select语句根据:is的位置将每个字符串拆分为两个,从每个字符串中删除任何额外的空格,然后使用指定的:冒号将它们重新连接在一起,并在它们之间留有空格

select rtrim(ltrim(parsename(replace(t.description, ':', '.'), 2))) + ': ' + rtrim(ltrim(parsename(replace(t.description, ':', '.'), 1))) as description
from @table as t
结果:


你试过什么?向我们展示您的代码,并告诉我们它显示的行为与您期望的行为有何不同。作为一个提示,这里将是你的朋友……除此之外,这根绳子可能应该断开。这里有两种类型的数据,NVARCHAR名称存档人员文件夹和位IsActive。我会把名字放在一列,把IsActive放在另一列。这允许您使用IsActive列查询数据库,而不必解析字符串。@Lewsterin这是第三方数据库-更改架构不是选项。我正在清理数据以供报告之用。这很公平,但我的第一条评论呢?所以这不是一个代码编写服务。你尝试过什么?向我们展示您的代码,并告诉我们它显示的行为与您期望的行为有何不同。作为一个提示,这里将是你的朋友……除此之外,这根绳子可能应该断开。这里有两种类型的数据,NVARCHAR名称存档人员文件夹和位IsActive。我会把名字放在一列,把IsActive放在另一列。这允许您使用IsActive列查询数据库,而不必解析字符串。@Lewsterin这是第三方数据库-更改架构不是选项。我正在清理数据以供报告之用。这很公平,但我的第一条评论呢?所以,这不是一个代码编写服务。不完全工作;对于第四行,冒号前有一个空格。原因是前面有两个空格。请停止为那些没有首先解决自己问题的人编写代码。Stack Overflow不是一种代码编写服务,你应该珍惜你的时间,而不是为那些在请求他人为他们解决问题之前懒得尝试解决问题的人编写代码。放松@Lewsterin现在是周五,我推迟了期末考试。此外,你不同意吗?干杯。@Lewsterin很确定scismon已经超过18岁了,所以这属于他的时间,他的选择范围。这很有效,谢谢@scsimon。值得一提的是,我意识到这是一个非常简单的请求,但是我没有解析我使用子字符串的失败尝试,而是认为有人可以更有效地
让我进去@西蒙做到了,我很感激。不完全有效;对于第四行,冒号前有一个空格。原因是前面有两个空格。请停止为那些没有首先解决自己问题的人编写代码。Stack Overflow不是一种代码编写服务,你应该珍惜你的时间,而不是为那些在请求他人为他们解决问题之前懒得尝试解决问题的人编写代码。放松@Lewsterin现在是周五,我推迟了期末考试。此外,你不同意吗?干杯。@Lewsterin很确定scismon已经超过18岁了,所以这属于他的时间,他的选择范围。这很有效,谢谢@scsimon。值得一提的是,我意识到这是一个非常简单的请求,但是我没有解析我使用子字符串的失败尝试,而是认为有人可以更有效地插话@西蒙做到了,我很感激。