ユーザーがExcelファイルをアップロードし、ExcelファイルのデータをSQLServerに挿入できるページがあります。ここで、「001」、「029」、「236」などの値を持つExcelファイルの列があるという小さな問題があります。SQL Serverに挿入すると、SQLでは前のゼロが無視されるため、データは「1」、「29」、「239」になります。SQLの列のデータ型はvarchar(10)です。これを解決する方法は?
6 に答える
Excel は、セルの値を自動的に数値に変換するようです。処理する前に、Excel シートでセルの内容の前に一重引用符を付けてみてください。例'001
。ユーザーがそれを行うことを信頼できない場合は、文字列の書式設定ルーチンを使用して、数字をゼロで埋めてください。
何かがExcelセルのデータを文字列から整数に変換している必要があります。挿入はどのように行っていますか?
ユーザーが Excel に 001 を入力すると、数字の 1 に変換されます。
ユーザーが '001' を Excel に入力すると、セルにテキストとして保存されます。
セルが数値形式「@」で事前にフォーマットされている場合、ユーザーがセルに 001 を入力すると、テキスト「001」として入力されます。「@」数値形式は、セルがテキスト セルであり、任意のエントリ (数値、日付、時刻、分数などのように見えるかどうかにかかわらず) をそのままセルに配置する必要があることを Excel に伝えます。テキストとして細胞。
この列を事前に「@」でフォーマットするようにユーザーに指示できますか? ユーザーは「001」を忘れずに入力する必要がないため、これは一般的にこれを処理する最も信頼できる方法です。
Excelは常にこれを行い、それは厄介です。私が知っている3つの回避策があります:
Excel形式のセルにデータを入力する前に、セルをテキストとしてフォーマットします(必要に応じて列全体を実行できます)。これは、スプレッドシートとユーザーを制御する場合にのみ機能します。基本的には機能しません:-)。
Excelデータに数値やテキストが混在していると仮定し、インポートする前にExcelで修正します。スプレッドシートに列を追加し、TEXT()関数を使用して数値をテキストに変換します(= TEXTのように)。 (A2、 "000"); 記入してください。また、ワークシートを編集できることを前提としています。
コードに挿入するときに番号を修正する必要があると仮定します。データの読み込み方法に応じて、T-SQLまたは他のコードで発生する可能性があります。TSQLでは、この式はゼロを3文字の幅で埋めるために機能します。right( '000' + cast(2 as varchar(3))、3)
エクセルはおそらくここで犯人です。ファイルを CSV に変換してみて、どのようになるかを確認してください。新しい CSV ファイルで先頭のゼロがなくなっている場合は、Excel に問題があります。
Excelセルのデータ型「テキスト」を設定すると役立つ場合があります。