如何在MySQL中有条件地将英寸转换为cm(或SELECT期间的类似转换)?

时间:2011-10-23 00:03:12

标签: mysql sql

我有一张类似于以下内容的表格:

value    unit
-----    -----
100      cm
30       in
120      cm
35       in
37       in
29       in

在我的选择中,我想将英寸转换为厘米。如下所示:

SELECT AVG(unit = in ? value*2.54 : value) FROM data_table;

在MySQL中执行此类选择的正确语法或方法是什么?

4 个答案:

答案 0 :(得分:4)

SELECT AVG(value) FROM (
  SELECT
    CASE unit
      WHEN "cm" THEN value
      WHEN "in" THEN value*2.54
      END AS value
    FROM data_table
) AS all_in_cm

答案 1 :(得分:2)

您可以将@Mikhail的解决方案“汇总”到没有子查询的单个SELECT中:

SELECT AVG(value * CASE unit WHEN 'cm' THEN 1 WHEN 'in' THEN 2.54 END)
FROM data_table

或者,您可以对单位使用微小的查找子选择,如下所示:

SELECT AVG(d.value * u.factor)
FROM data_table d
  INNER JOIN (SELECT 'cm' AS unit, 1 AS factor UNION ALL SELECT 'in', 2.54) u
    ON d.unit = u.unit

答案 2 :(得分:1)

SELECT CASE d.Unit
        WHEN 'in' THEN d.Value * 2.54
        ELSE d.Value
       END AS centemeters
FROM data_table at d;

答案 3 :(得分:0)

CREATE FUNCTION CONV_IN_CM (measurement INT,  base_type ENUM('in','cm'))
RETURNS FLOAT(65,4) 
DETERMINISTIC
RETURN IF(base_type = 'in', measurement * 2.54, 
       IF(base_type = 'cm', measurement / 2.54, NULL));

以下是此命令的语法。方括号内的文本(即[和])是可选的。选项由条(即|)分隔。以逗号开头的省略号表示重复模式。除了较大的语法之外,语法之前或之后的省略号用于突出显示相关的。以斜体字母显示的文本表示应替换为与数据库相关的特定名称的文本(例如,具有列名称的列)。

CONV_IN_CM(measurement, {in | cm})