Temos algumas planilhas Excel com números de parcelas para propriedades que devem estar em um formato varchar padrão semelhante a:
[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
Infelizmente, temos alguns números de encomendas que foram convertidos para notação científica. Isso significa que eles estão no formato errado para números de encomenda e devem ser convertidos de volta para o formato decimal ou numérico normal. Estou encontrando dificuldade em converter apenas os valores que possuem a notação científica. A coluna é do tipo de dados nvarchar(255), mas esses valores precisam ser manipulados de volta para o tipo de dados numérico ou decimal.
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
A tabela acima foi recuperada com a seguinte instrução SELECT
SELECT [Parcel Number 1]
,[Building Address]
FROM XLSimport
WHERE [Parcel Number 1] like '%e%'
Meu entendimento é que devo ser capaz de converter o valor em decimal quando estiver em notação científica. No entanto, outros números de encomenda que tenham um 'E' legítimo precisam permanecer os mesmos. Como posso contabilizar os diferentes valores de 'e' e ainda converter os números de parcela em notação científica de volta ao seu formato de número de parcela padrão?
Frequentemente me deparo com o erro ao converter nvarchar em mensagens de erro numéricas e me pergunto se é por causa dos números das encomendas que têm um E, mas não estão no formato científico.
Por exemplo, eu executo esta consulta:
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
Recebo então o seguinte erro:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to numeric.
A saída do CASE só pode ser de um tipo de dados. O primeiro ramo é
decimal
e o segundo énvarchar(255)
.De acordo com as regras de precedência de tipo de dados (Transact-SQL) no SQL Server, o tipo de dados resultante para o CASE é
decimal
.Adicione mais uma conversão
nvarchar(255)
na primeira ramificação do CASE.