【问题标题】:Function to convert units based on conversion table根据换算表进行单位换算的功能
【发布时间】:2020-06-03 07:52:41
【问题描述】:

数据库中有一个非常简单的公制单位转换表,如下所示:

| UnitFrom | UnitTo | Scale |
|    m     |   mm   |  1000 |
|    m     |   cm   |   100 |
    etc.

我正在考虑创建一个函数来转换单位,该函数根据输入(Unit、FromUnit、ToUnit)从表中计算转换。
例如Conv_Units(0.1, 'm', 'cm') 返回 100。

这甚至可能吗?我想出的是以下,但它不起作用:

CREATE FUNCTION dbo.Conv_Units
(
    [@Unit] float
    , [@FromUnit] nvarchar(20)
    , [@ToUnit] nvarchar(20)
);
RETURNS float
AS
BEGIN

    DECLARE @ConvUnit float;
    DECLARE @Unit float;
    DECLARE @FromUnit nvarchar(20);
    DECLARE @ToUnit nvarchar(20);
    DECLARE @Scale float = (select Scale from dbo.UnitsConversion where FromUnit = @FromUnit and ToUnit = @ToUnit);

    SELECT @ConvUnit = @Unit * @Scale

    RETURN @ConvUnit

END
GO

【问题讨论】:

  • 删除参数周围的括号并删除DECLARE @Unit float; DECLARE @FromUnit nvarchar(20); DECLARE @ToUnit nvarchar(20);

标签: sql sql-server tsql sql-server-2017 stored-functions


【解决方案1】:

感谢@GSerg 的解决方案。

就是这样:

CREATE FUNCTION dbo.Conv_Units(@Unit float, @FromUnit nvarchar(20), @ToUnit nvarchar(20))
RETURNS float
AS
BEGIN
    DECLARE @ConvUnit float;
    DECLARE @Scale float = (select Scale from dbo.UnitsConversion where FromUnit = @FromUnit and ToUnit = @ToUnit)

    SELECT @ConvUnit = @Unit * @Scale

    RETURN @ConvUnit

END
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 2013-04-02
    • 1970-01-01
    • 2020-06-25
    • 2021-03-23
    • 1970-01-01
    • 2011-01-02
    • 2014-02-14
    相关资源
    最近更新 更多