sql >> Databáze >  >> RDS >> Sqlserver

Odeslání vědecké notace (z varchar -> numerické) do pohledu

Je tu několik různých problémů, které se tu spojují najednou. Podívejme se na některé z nich:

  1. Čísla přenášíte jako DECIMAL(18, 18). To znamená "dej mi číslo, které má místo pro CELKOM 18 znaků a 18 z nich by mělo být za desetinnou čárkou". Funguje to dobře, pokud je vaše číslo menší než 0 (což platí pro všechna E-čísla), ale pokud se jej pokusíte použít na čísla> 0, přestane se zobrazovat. Pro čísla> 0 stačí přetypovat jako DECIMAL, aniž byste zadali cokoli jiného. .

  2. V případě, že přidáte "WHEN @d like '%E+%' THEN CAST(@d AS FLOAT)", dostanete pro čísla <0 různé výsledky, protože engine implicitně přehazuje výsledek jinak. Neznám pravidla o tom, jak se server SQL rozhodne přenášet výsledky CASE, ale provedení vámi navrhované změny zjevně způsobí, že je motor přetypuje jiným způsobem. Problém vyřeší explicitní přetypování těchto výsledků jako desítkové.

  3. Své výsledky musíte důsledně LTRIM a RTRIM. Můžete buď přidat LTRIM a RTRIM ke každému příkazu případu, nebo můžete pouze LTRIM a RTRIM výsledky případu.

Zde je řešení, které by mělo vyřešit úplně všechno:

SELECT
    LTRIM(RTRIM(CASE 
        WHEN @d like '%E-%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL(18,18))
        WHEN @d like '%E+%' THEN CAST(CAST(@d AS FLOAT) AS DECIMAL)
        ELSE @d
    END))


  1. Zobrazení dat PostGIS pomocí Leafletjs

  2. Vkládání náhodných znaků do databáze MYSQL

  3. Protokol transakcí serveru SQL, část 3:Základy protokolování

  4. obrázky jsou nahrané, ale nevidím je