我正在进行一些数据映射,在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 ,,,,,,,,,,,,
答案 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文件。