SQL Server 2005 - Převod numeric na varchar   otázka

SQL

Zdravím. V databázi na SQL Serveru 2005 mám uložena ve sloupci typu Numeric(10,2) data, která obecně nabývají hodnot celých nebo desetinných s jedním i dvěma desetinnými místy. Potřeboval bych je pomocí nějaké fuknce použité v příkazu SELECT převést na znakový typ (třeba varchar) a to tak, aby ve výsledném řetězci nebyly pravostranné nuly a v případě, že je číslo celé, tak ani oddělovač desetinných míst. Experimentoval jsem s funkcemi CAST, CONVERT a STR ale pořád se nedaří. Napadlo mě si napsat uživatelskou skalární funkci, ale proč vymýšlet něco, co už je (třeba) hotové...

Na klientovi to samozřejmě není problém, ale to z technických důvodů nemohu. Dík za případné rady.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nevím jestli to je to pravé ořechové, ale ja bych to třeba řešil takhle:

SELECT CASE WHEN QUANTITY - CONVERT(decimal(12,1),QUANTITY)>0 THEN CAST(CONVERT(decimal(12,2),QUANTITY) AS VARCHAR(20)) ELSE

CASE WHEN QUANTITY - CONVERT(decimal(12,0),QUANTITY)>0 THEN CAST(CONVERT(decimal(12,1),QUANTITY) AS VARCHAR(20)) ELSE

CAST(CONVERT(decimal(12,0),QUANTITY) AS VARCHAR(20)) END END AS CONVERT_QUANTITY,

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přiznám se, že toto mě nenapadlo a zvolil jsem cestu nejmenšího odporu - uživatelskou skalární funkci. V ní si nejprve převedu funkcí STR numerickou hodnotu na řetězec pevné délky s dvěma desetinnými místy a pak odmazávám zprava nuly a nakonec případně i desetinnou tečku.

CREATE FUNCTION [dbo].[udf_NumToStr]
(@NumHodn Numeric(10,2))
RETURNS varchar(MAX)
AS
BEGIN
  DECLARE @StrHodn varchar(MAX)
  SET @StrHodn=''
  IF @NumHodn IS NOT NULL
    BEGIN
      SET @StrHodn=LTRIM(RTRIM(STR(@NumHodn,10,2)))
      WHILE SUBSTRING(@StrHodn,LEN(@StrHodn),1)='0'
        BEGIN
          SET @StrHodn=STUFF(@StrHodn,LEN(@StrHodn),1,'')
        END
      IF SUBSTRING(@StrHodn,LEN(@STRHodn),1)='.'
        BEGIN
          SET @StrHodn=STUFF(@StrHodn,LEN(@StrHodn),1,'')
        END
    END
  RETURN @StrHodn
END

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback