如何将具有隐藏字符的空白/单元格转换为null或以其他方式删除隐藏字符

时间:2019-09-24 21:22:21

标签: sql excel database ssis

我正在使用SSIS包将数据从Excel加载到SQL数据库。由于空单元格中有一些隐藏的字符,因此我的SSIS包失败,因此我需要将这些空单元格替换为null或删除/删除隐藏的字符。我的Excel列的格式设置为“数字”。任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

听起来您的数据中有不必要的空格。如果数据已经被单元格分隔,我将格式切换为“常规”,然后使用TRIM函数。如果是整个单元格都需要删除,我将单击“ Go to Special”(找到特殊内容),找到一个选择,选择空白,然后将其删除。希望这会有所帮助!

答案 1 :(得分:0)

http://www.asciitable.com/

ASCII字符的组合在任何关系数据库中形成一个字符串。 例如:NULL被指定为ASCII字符0。 如果任何字符串值的前面都有CHAR(0),则该值将对人眼不可见。 同样,有许多不可见的隐藏字符。 我们仍然可以从中删除那些隐藏的字符

CREATE FUNCTION [dbo].[CleanupData2] 
(
       @nstring nvarchar(255)
)
RETURNS varchar(255)
AS
BEGIN

       DECLARE @Result varchar(255)
       SET @Result = ''

       DECLARE @nchar nvarchar(1)
       DECLARE @position int
       SET @position = 1
       
       WHILE @position <= LEN(@nstring)
        BEGIN
            SET @nchar = SUBSTRING(@nstring, @position, 1)
        IF((ASCII(@nchar) BETWEEN 64 and 90) OR (ASCII(@nchar) BETWEEN 97 and 122) OR (ASCII(@nchar) BETWEEN 48 and 57) OR ASCII(@nchar) = 32)
             BEGIN
                    SET @Result = @Result + @nchar
             END
         ELSE 
            BEGIN
             DECLARE @asciichar varchar(10)
             SET @asciichar = ASCII(@nchar)
             SET @Result = @Result + REPLACE(@nchar,CHAR(@asciichar),'')
           END
       SET @position = @position + 1
   END

RETURN @Result

END

GO