次のような標準のvarchar形式である必要があるプロパティの区画番号を含むいくつかのExcelスプレッドシートがあります。
[Parcel # 1] [Building Address]
038-60-171-16-000 1750 W 4th St
038-60-238-09-000 2003-2027 W 4th St
01-15393 201 5th St NE
01-13504 101 5th St SE
25-20-00-03-008.501 1800 E 5th St
36-102-0700-000 2932 S 5th St
280615 2600-B 6th St SW
31-0101.000 1202 16th St
054-259620-00.000 843 N 21st St
残念ながら、科学表記に変換された小包番号がいくつかあります。つまり、小包番号の形式が正しくなく、通常の10進数または数値形式に変換し直す必要があります。科学表記のある値だけを変換するのが困難です。列はnvarchar(255)データ型ですが、これらの値は数値または10進数データ型に戻す必要があります。
Parcel Number 1(Min) Building Address
3.4007000221e+015 247 S Burnett Rd
3.1844401004e+013 433 N Cleveland Ave
3.4007000222e+016 2415 Lexington Ave
E020-0010-006-0211 7271 N Main St
3.6360705006e+013 825 W Market St
3.4007000353e+015 148 W North St
1.40109139e+011 4453-4461 SR-159
16-B-029-E-00-004 7314-7352 Industrial Park Blvd
上記のテーブルは、次のSELECTステートメントで取得されました
SELECT [Parcel Number 1]
,[Building Address]
FROM XLSimport
WHERE [Parcel Number 1] like '%e%'
私の理解では、科学表記法の場合、値を小数にキャストできるはずです。ただし、正当な「E」を持つ他の小包番号は同じままにする必要があります。さまざまな「e」値を考慮に入れ、それでも科学表記法で区画番号を標準の区画番号形式に変換するにはどうすればよいですか?
Nvarcharを数値エラーメッセージに変換するエラーに頻繁に出くわし、Eが含まれているが科学的な形式ではない区画番号が原因であるのかと思います。
たとえば、次のクエリを実行します。
SELECT
CASE
WHEN [Parcel Number 1] like '%E+%' THEN CAST(CAST([Parcel Number 1] AS FLOAT) AS DECIMAL)
ELSE [Parcel Number 1]
END
FROM XLSimport
その後、次のエラーが発生します。
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.
CASEからの出力は、1つのデータ型のみです。最初のブランチはdecimal
で、2番目のブランチはnvarchar(255)
です。
SQL Serverの データタイプの優先順位(Transact-SQL) ルールによると、CASEの結果のデータタイプはdecimal
です。
CASEの最初のブランチのnvarchar(255)
にキャストをもう1つ追加します。
SELECT
CASE
WHEN [Parcel Number 1] like '%E+%'
THEN CAST(CAST(CAST([Parcel Number 1] AS FLOAT) AS DECIMAL) AS NVARCHAR(255))
ELSE [Parcel Number 1]
END
FROM XLSimport