Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konversi string dengan ekspresi ke desimal

Saya akan menggunakan CLR, sesuatu seperti ini (ini memiliki keuntungan bekerja dalam operasi berbasis SET sedangkan alternatif sql dinamis (yaitu jawaban Abdul) tidak akan):

EDIT: Kode Sumber untuk CLR dll (Visual Studio 2008) diposting di sini:http:// /www.heavencore.co.uk/filehub/uploaded/EvalFunction.zip

Jika Anda lebih suka mengkompilasi rakitan sendiri, berikut adalah kodenya:

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

setelah diinstal dan diikat, Anda dapat melakukan ini:

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

Edit:OK, saya baru saja menguji ini dan berfungsi dengan baik dalam operasi berbasis set dll, instalasi adalah sebagai berikut:

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggunakan OUTPUT untuk menangkap ID baru dan lama?

  2. Apakah ada Entity Framework 7 Database-First POCO Generator?

  3. Hitung jumlah catatan yang dikembalikan oleh grup menurut

  4. SQL Server setara dengan tipe data enum MySQL?

  5. Cara memaksa petunjuk nolock untuk login server sql