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

CASTとIsNumeric

    varchar値を任意の数値タイプに変換できる場合、IsNumericは1を返します。これには、int、bigint、decimal、numeric、real、floatが含まれます。

    科学的記数法が問題を引き起こしている可能性があります。例:

    Declare @Temp Table(Data VarChar(20))
    
    Insert Into @Temp Values(NULL)
    Insert Into @Temp Values('1')
    Insert Into @Temp Values('1e4')
    Insert Into @Temp Values('Not a number')
    
    Select Cast(Data as bigint)
    From   @Temp
    Where  IsNumeric(Data) = 1 And Data Is Not NULL
    

    IsNumericで使用できるトリックがあり、科学的記数法の数値に対して0を返します。同様のトリックを適用して、10進値を防ぐことができます。

    IsNumeric(YourColumn +'e0')

    IsNumeric(YourColumn +'.0e0')

    試してみてください。

    SELECT CAST(myVarcharColumn AS bigint)
    FROM myTable
    WHERE IsNumeric(myVarcharColumn + '.0e0') = 1 AND myVarcharColumn IS NOT NULL
    GROUP BY myVarcharColumn
    


    1. MySQL数学関数(全リスト)

    2. Postgresql GROUP_CONCATと同等ですか?

    3. システム内の役割とステータスの管理

    4. OracleのSIGN()関数