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

式付きの文字列を10進数に変換します

    私はCLRを使用します。これは、次のようなものです(これには、SETベースの操作で機能するという利点がありますが、動的SQLの代替手段(つまり、Abdulsの回答)では機能しません):

    編集: ここに投稿されたCLRdll(Visual Studio 2008)のソースコード: http:/ /www.heavencore.co.uk/filehub/uploaded/EvalFunction.zip

    アセンブリを自分でコンパイルしたい場合は、次のコードを使用してください。

    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.SqlTypes
    Imports Microsoft.SqlServer.Server
    Imports System.Runtime.InteropServices    
    
    Partial Public Class UserDefinedFunctions
        <Microsoft.SqlServer.Server.SqlFunction()> _
        Public Shared Function EVAL(ByVal InputExpression As SqlString) As SqlDecimal
            Return Evaluate(InputExpression)
        End Function
    
        Private Shared Function Evaluate(ByVal expression As SqlString) As SqlDecimal
            Dim expressionStr As String = expression.ToString()
            Dim loDataTable = New DataTable()
            Dim loDataColumn = New DataColumn("Eval", GetType(Double), expressionStr)
            loDataTable.Columns.Add(loDataColumn)
            loDataTable.Rows.Add(0)
            Return ParseDecimal(loDataTable.Rows(0)("Eval").ToString(), 0)
        End Function
    
        Public Shared Function ParseDecimal(ByVal InputStr As String, Optional ByVal ReturnIfFail As Decimal = 0) As Decimal
            Dim ParseOutput As Decimal = 0
            If Decimal.TryParse(InputStr, ParseOutput) = False Then
                Return ReturnIfFail
            Else
                Return ParseOutput
            End If
        End Function
    End Class
    

    インストールしてバインドしたら、次のように実行できます。

    SELECT Faktor, dbo.Eval(Faktor) as Result FROM Artikel
    

    編集:OK、これをテストしたところ、セットベースの操作などで正常に動作します。インストールは次のとおりです:

    -- Enable the CLR to run user-defined functions
    EXEC sp_configure 
        'clr enabled' ,
        '1'
    GO
    RECONFIGURE
    GO
    
    -- Set the appropriate database security permission
    ALTER DATABASE [TargetDatabase] SET TRUSTWORTHY ON
    GO
    
    -- Import the assembly
    CREATE ASSEMBLY EvalFunction
    FROM 'C:\bin\EvalFunction.dll'  
    WITH PERMISSION_SET = EXTERNAL_ACCESS;
    GO
    
    -- Create the Eval function for easy use
    CREATE FUNCTION dbo.Eval
        (
          @Expression NVARCHAR(255)
        )
    RETURNS DECIMAL(18, 2)
    AS EXTERNAL NAME 
        EvalFunction.[EvalFunction.UserDefinedFunctions].EVAL 
    GO
    


    1. 文字列を数値に変換/エンコードする

    2. MySQL-ストアドプロシージャで例外をスローする方法は?

    3. LIBSODIUMは、AES_DECRYPTで行ったように、mysqlクエリ内のデータを復号化します

    4. カテゴリごとのMySQL制限結果