使用sql删除尾随逗号

时间:2014-09-03 00:25:15

标签: sql

我正在进行一些数据映射,在5列的15列中将有数据,其余的将为空。当我将我的fie导​​出为csv时,我的列没有数据返回coma。我的供应商需要移除那些尾随的昏迷。我尝试在其中一个colmns上使用trim,但是没有用。样品

示例:

  

客户端ID,schoolc,schname,区,州,NCESid,PARTNERID,动作,保留1,RESERVED2,Reserved3,Reserved4,Reserved5,Reserved6,Reserved7,Reserved8,Reserved9,reserved10   ca-rosev42441,26,barns Elementary,Sample City School   区,CA,163364418255 ,,,,,,,,,,,,

5 个答案:

答案 0 :(得分:1)

查看此示例

CREATE FUNCTION [dbo].[ufn_TrimLeadingCharacters_reversed] ( @Input VARCHAR(50), @LeadingCharacter CHAR(1) )
RETURNS VARCHAR(50)
AS
BEGIN
    RETURN reverse(REPLACE(LTRIM(REPLACE(reverse(@Input), ISNULL(@LeadingCharacter, '0'), ' ')), 
                   ' ', ISNULL(@LeadingCharacter, '0')))
END



select dbo.ufn_TrimLeadingCharacters_reversed('jazz,guitar,bass,strings,,,,,',',')

答案 1 :(得分:0)

很可能有一种更好的方法来获得你所追求的格式,但假设如此
- 前五列将具有长度> = 1的一些数据
- 两个逗号一起表示结束的开头(至少是该行的开头)
您可以以类似于下面的LEFT(...)调用的方式单独处理每行/每行数据

下面的示例代码段应该有用。请注意,只有设置示例才需要DECLARE,SET和PRINT语句,如果@line包含要输出的数据行,则只需要LEFT(...)。如果我们可以看到数据是如何被从表中拉出来的,那么可能会有更明智和有效的方法来删除无关的逗号。

DECLARE @line nvarchar(max)
SET @line = 'Clientid,schoolc,schname,District,state,NCESid,PartnerID,Action,Reserved1,Reserved2,Reserved3,Reserved4,Reserved5,Reserved6,Reserved7,Reserved8,Reserved9,reserved10 ca-rosev42441,26,barns Elementary,Sample City School District,CA,163364418255,,,,,,,,,,,,'

SET @line = LEFT(@line,CHARINDEX(',,',@line)-1) ---NoTrailingCommas

PRINT @line

答案 2 :(得分:0)

您是否使用批量插入插入数据?您可以定义格式文件,以便只读取前5列。

相反如果您已经拥有整个字符串,则可以使用charindex搜索,并使用substr。

答案 3 :(得分:0)

以下适用于带空格的数据提供了破坏条字符不在您的数据中(我最喜欢的虚拟角色,但完全随意)

CREATE FUNCTION [dbo].[RTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN

    RETURN REPLACE(REPLACE(RTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END


GO

而且,这来自何处:

CREATE FUNCTION [dbo].[LTRIMCHAR] (@Input NVARCHAR(max), @TrimChar CHAR(1) = ',')
RETURNS NVARCHAR(max)
AS
BEGIN
      RETURN REPLACE(REPLACE(LTRIM(REPLACE(REPLACE(@Input,' ','¦'), @TrimChar, ' ')), ' ', @TrimChar),'¦',' ')
END



GO

答案 4 :(得分:-1)

最简单的方法是编写一个查询,其中SELECT子句仅包含供应商希望看到的列,并将该查询的结果导出为CSV文件。