Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从数据库中的字段计算数字_Sql_Sql Server - Fatal编程技术网

Sql 从数据库中的字段计算数字

Sql 从数据库中的字段计算数字,sql,sql-server,Sql,Sql Server,我正在为一个棒球队建立一个数据库,其中一个表格是关于投手数据的。如果你知道棒球,你就知道棒球时代的计算方法是(放弃/除以投球局的赢得的得分)*9 在表中,我对投球局和赢得的得分有单独的列,通过SQL语句,我想计算ERA 目前投出的局数存储为十进制,如“1.0”或“6.1”或“7.2”,但在计算时,如果有十进制(如“7.2”),我需要将“.2”实际更改为“.66666”,或将“.1”更改为“.33333” 以下是我迄今为止在SQL中尝试的内容: SELECT *, CONVERT(DECI

我正在为一个棒球队建立一个数据库,其中一个表格是关于投手数据的。如果你知道棒球,你就知道棒球时代的计算方法是(放弃/除以投球局的赢得的得分)*9

在表中,我对投球局和赢得的得分有单独的列,通过SQL语句,我想计算ERA

目前投出的局数存储为十进制,如“1.0”或“6.1”或“7.2”,但在计算时,如果有十进制(如“7.2”),我需要将“.2”实际更改为“.66666”,或将“.1”更改为“.33333”

以下是我迄今为止在SQL中尝试的内容:

    SELECT *, CONVERT(DECIMAL(10,2), ((stat_er / NULLIF(stat_ip,0)) * 9)) AS stat_era FROM stats_pitching ORDER BY stat_era ASC

这会将“stat_ip”更改为.0“、.1”或.2”,因为这是从数据库中获得的。如何将SQL表达式中以.1”或.2“结尾的列中的任何内容更改为.3333”或.6666?我会使用“Case”类型吗?如果是,是否有人有一些示例?

您可以使用
Case
如下:

declare @x decimal(38,6) = 7.1

select case @x - cast(FLOOR(@x) as decimal)
    when 0 THEN @x
    when 0.1 THEN cast(FLOOR(@x) as decimal) + 0.3333
    when 0.2 THEN cast(FLOOR(@x) as decimal) + 0.6666
end
这将永远改变

  • x、 0到x.0
  • x、 1至x.3333
  • x、 2至x.6666

其中x是一个整数。

您可以使用
CASE
如下:

declare @x decimal(38,6) = 7.1

select case @x - cast(FLOOR(@x) as decimal)
    when 0 THEN @x
    when 0.1 THEN cast(FLOOR(@x) as decimal) + 0.3333
    when 0.2 THEN cast(FLOOR(@x) as decimal) + 0.6666
end
这将永远改变

  • x、 0到x.0
  • x、 1至x.3333
  • x、 2至x.6666

其中x是一个整数。

您可以使用
CASE
如下:

declare @x decimal(38,6) = 7.1

select case @x - cast(FLOOR(@x) as decimal)
    when 0 THEN @x
    when 0.1 THEN cast(FLOOR(@x) as decimal) + 0.3333
    when 0.2 THEN cast(FLOOR(@x) as decimal) + 0.6666
end
这将永远改变

  • x、 0到x.0
  • x、 1至x.3333
  • x、 2至x.6666

其中x是一个整数。

您可以使用
CASE
如下:

declare @x decimal(38,6) = 7.1

select case @x - cast(FLOOR(@x) as decimal)
    when 0 THEN @x
    when 0.1 THEN cast(FLOOR(@x) as decimal) + 0.3333
    when 0.2 THEN cast(FLOOR(@x) as decimal) + 0.6666
end
这将永远改变

  • x、 0到x.0
  • x、 1至x.3333
  • x、 2至x.6666

其中x是一个整数。

您可以通过使用
ROUND
函数应用简单的数学来实现。假设
Value
是您的列名

ROUND(Value, 0) + (10 * (Value - ROUND(Value, 0)) / 3)

小演示:

您可以通过使用
ROUND
函数应用简单的数学来实现。假设
Value
是您的列名

ROUND(Value, 0) + (10 * (Value - ROUND(Value, 0)) / 3)

小演示:

您可以通过使用
ROUND
函数应用简单的数学来实现。假设
Value
是您的列名

ROUND(Value, 0) + (10 * (Value - ROUND(Value, 0)) / 3)

小演示:

您可以通过使用
ROUND
函数应用简单的数学来实现。假设
Value
是您的列名

ROUND(Value, 0) + (10 * (Value - ROUND(Value, 0)) / 3)

小演示:

我遇到了一个类似的问题,并通过这种方式解决了它

select CASE WHEN CAST(stat_ip as VARCHAR) like '%.1%' THEN stat_ip + .2333333 
            WHEN CAST(stat_ip as VARCHAR) like '%.2%' THEN stat_ip + .4666667 
            ELSE stat_ip
            END
from stats_pitching

我有一个类似的问题,并以这种方式解决了它

select CASE WHEN CAST(stat_ip as VARCHAR) like '%.1%' THEN stat_ip + .2333333 
            WHEN CAST(stat_ip as VARCHAR) like '%.2%' THEN stat_ip + .4666667 
            ELSE stat_ip
            END
from stats_pitching

我有一个类似的问题,并以这种方式解决了它

select CASE WHEN CAST(stat_ip as VARCHAR) like '%.1%' THEN stat_ip + .2333333 
            WHEN CAST(stat_ip as VARCHAR) like '%.2%' THEN stat_ip + .4666667 
            ELSE stat_ip
            END
from stats_pitching

我有一个类似的问题,并以这种方式解决了它

select CASE WHEN CAST(stat_ip as VARCHAR) like '%.1%' THEN stat_ip + .2333333 
            WHEN CAST(stat_ip as VARCHAR) like '%.2%' THEN stat_ip + .4666667 
            ELSE stat_ip
            END
from stats_pitching

7.666666怎么可能真的意味着7.2???7.2真的意味着7.2句点,它可以是无限数的向上或向下舍入值。例如7.1676,7.178,7.1989234324234324324类似于我所说的无限数。在美国棒球统计中使用.1和.2来表示一局的三分之一和三分之二是很常见的。7.66666666 r怎么可能真的是指7.2???7.2真的是指7.2周期,它可以是无限数的四舍五入或四舍五入值。例如7.1676,7.178,7.198923432424324,就像我说的无限数一样。在美国棒球统计中,使用.1和.2代表一局的三分之一和三分之二是很常见的。7.666666怎么真的是指7.2???7.2实际上意味着7.2句点,它可以是无限数的向上或向下舍入值。例如7.1676、7.178、7.1989234324234324324,就像我说的无限数一样。在美国棒球统计中,使用.1和.2来代表一局的三分之一和三分之二。7.666666怎么可能真的意味着7.2???7.2真的意味着7.2句点,它可以是无限数的向上或向下舍入值。例如7.1676、7.178、7.1989234324234324,就像我说的无限数一样。在美国棒球统计中,使用.1和.2代表一局的三分之一和三分之二是很常见的。