我有一个表,该表的列为’Faktor’(varchar(50)),其中包含以下表达式:
1/3
2*9/5
0.567
0.23
不,我正在寻找一种执行选择的方式
select Faktor from Artikel
它应该返回带有值的十进制类型的列
0.333333
3.6
0.567
0.23
我会选择CLR,类似这样(它具有在基于SET的操作中工作的优势,而动态sql替代项(即Abduls答案)则不会):
编辑: CLR dll(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
编辑:好的,我刚刚测试过,它在基于集合的操作等中工作正常,安装如下:
-- 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
问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:
问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:
问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为:
问题内容: 我正在尝试将十六进制代码长8个字符的字符串转换为整数,以便可以进行int比较,而不是对许多不同值进行字符串比较。 我知道在C ++中这是微不足道的,但是我需要在Java中完成。我需要满足的测试用例实质上是将“ AA0F245C”转换为int,然后再返回到该字符串,以便我知道它在正确转换。 我尝试了以下方法: 我也尝试一次将两个字符做一次,然后将结果相乘,转换有效,但数字不正确。 不能这
关于将带浮点数的字符串转换为十进制浮点数的方法有很多讨论,但我没有找到用C语言解决问题的方法(python、C#等) 首先,我们输入初始数的数字系统,并将浮点数输入字符串变量。 然后将输入分成右(double)部分和左(int)部分,然后为这两部分调用函数void floatToDec(字符串输入,int sys,char标志)(标志“l”表示左部分标志“r”meens right part)。为
问题内容: 我写了一些代码将十六进制显示字符串转换为十进制整数。但是,当输入类似100a或625b(带有字母的东西)时,我得到了这样的错误: java.lang.NumberFormatException:对于输入字符串:java.lang.Integer.parseInt(未知源)处的java.lang.NumberFormatException.forInputString(未知源)处为“ 1