sql >> データベース >  >> RDS >> Sqlserver

SQL Server - キャストと除算

    これを試してください..

    DECLARE @table table(XYZ VARCHAR(8) , id int)
    
    INSERT INTO @table
    SELECT '4000', 1
    UNION ALL
    SELECT '3.123', 2
    UNION ALL
    SELECT '7.0', 3
    UNION ALL
    SELECT '80000', 4
    UNION ALL
    SELECT NULL, 5
    UNION ALL
    SELECT 'WTF',6
    
    SELECT CASE 
         WHEN ISNUMERIC(XYZ) = 0 THEN NULL
         WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
         WHEN ISNUMERIC(XYZ) >0  then  convert(decimal(18,3),xyz) / 1000.000
         ELSE NULL
    END
      FROM @table
    

    出力

    4.00000000000
    3.12300000000
    0.00700000000
    80.00000000000
    NULL
    NULL
    

    編集 - 出力で小数点以下 3 桁を維持するには、これを行います

    SELECT convert(decimal(8,3),CASE 
         WHEN ISNUMERIC(XYZ) = 0 THEN NULL
         WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
         WHEN ISNUMERIC(XYZ) >0  then  convert(decimal(18,3),xyz) / 1000.000
         ELSE NULL
    END)
      FROM @table
    

    (8,3) がこれを定義していることに注意してください。合計精度は 8 桁で、ポイントの後に 3 桁あります。

    varchar(8) に戻すこともできます



    1. OracleSQLで関連するアイテムのグループを選択する方法

    2. Mysql HighUPDATESELECTがラグを引き起こしている

    3. PostgreSQL-caseステートメントで文字列に整数値を割り当てます

    4. Max(date) でレコードを取得し、値を比較して結果を取得するにはどうすればよいですか