0

基本的に、乱数のゼロをスキップしたい。解決策は、最初のゼロ以外の値で終わるフォーマットファイルにダミーの列を作成することだと思います。しかし、ネットを精査した後、私はそれを行う方法がわかりません。

編集:各行を明確にするために、0の乱数が前に付いています。

例えば

000004412900000009982101201021042010
000000935000000009902005199322071993
4

5 に答える 5

0
ALTER Function [dbo].[fn_CSVToTable] (@CSVList Varchar(5000))
Returns @Table Table (ColumnData Varchar(50))
As
Begin
If right(@CSVList, 1) <> ','
Select @CSVList = @CSVList + ','

Declare @Pos    Smallint,
@OldPos Smallint
Select  @Pos    = 1,
@OldPos = 1

While   @Pos < Len(@CSVList)
Begin
Select  @Pos = CharIndex(',', @CSVList, @OldPos)
Insert into @Table
Select  LTrim(RTrim(SubString(@CSVList, @OldPos, @Pos - @OldPos))) Col001
Select  @OldPos = @Pos + 1
End
Return
End
于 2013-01-08T06:15:16.357 に答える
0

これを試して。

DECLARE @str varchar(100)='000004412900000009982101201021042010'
DECLARE @str1 varchar(100)='000000935000000009902005199322071993'

    SELECT @str,RIGHT(@str,LEN(@str)-(PATINDEX('%'+'[1-9]'+'%',@str)-1)),@str1,RIGHT(@str1,LEN(@str1)-(PATINDEX('%'+'[1-9]'+'%',@str1)-1))
于 2012-07-25T04:09:01.273 に答える
0

MLS インポートで同様のことをしなければなりませんでした。これが本質的に私がやったことです。

BULK INSERT TmpTable FROM [CSVPATH] 
WITH (FIELDTERMINATOR = ',' , ROWTERMINATOR = '\n')

次に、修正する必要があるデータを修正します (先頭のゼロ)

やり方はいくつかありますが、2つ挙げてみます。

  1. UPDATE TmpTable Set TmpCol = CASE WHEN LEFT(TmpCol,1) = "0" THEN LTRIM(TmpCol, LEN(TmpCol) -1) ELSE TmpCol END

    2. UPDATE TmpTable Set TmpCol = SUBSTRING(TmpCol, PATINDEX('%[^0]%', TmpCol + '.'), LEN(TmpCol))

于 2012-07-24T16:03:16.270 に答える
0

.csv ファイルのインポート プロセスの最初のステップは、ファイルをデータベースに取得することだと思います。次に、2 番目のステップは、データをクリーンアップすることです。

インポート後にゼロを削除するには、関数を作成できます。

 create function [dbo].[RemoveLeadingZero](@strSrc as varchar(8000))
 returns varchar(8000)
 as
 begin
      declare  @strResult varchar(8000)
      set @strResult = ''
      begin
          set @strResult = Replace(Ltrim(Replace(@strSrc, '0', ' ')), ' ', '0')
      end
      return @strResult
 end
select dbo.RemoveLeadingZero('000004412900000009982101201021042010')

update myTable
set columnA = dbo.RemoveLeadingZero(columnA)
于 2012-07-24T17:45:04.260 に答える
0

最初に、一時的に作成された列の行にそのままインポートし、次にユーザー定義関数を作成するか、このセットベースを実行します

それはループして、その文字が「0」だった最初の文字を削除しました

TempCol = CASE WHEN LEFT(TempCol,1) = "0" THEN LTRIM(TempCol, LEN(TempCol) -1)
          ESLE TempCol
END

LOOP WHILE @LEN changes

@LEN = SUM(LEN(TempCol))
SELECT @LEN
于 2012-07-24T14:41:48.473 に答える