SQL - 在单个变量中管理字符与数值
SQL - managing character vs. numerical values in a single variable
下午好。也许比较简单的SQL题:
我有一个变量。它表示时间序列数据集中的月数。对于每个条目,当满足特定条件时,该计数将递增 1。它可以是从 0 到任何值的整数值,但不会超过 160。
但是,如果没有关于月数的数据,变量的值将是"X,",这就是问题所在。我正在尝试将查询与 WHERE 条件放在一起,该条件指定所述变量大于或等于 2(或 3 或 6 - 它是任意的)。正如您可能猜测的那样,SQL 无法解析 "X" 值(出于所有意图和目的,我们可以将其定义为一个非常大的数字)。
那么,如何为变量创建一个比较条件,将 "X" 值指定为任意高的数字,并在所有其他情况下保持相应的数值?我怀疑它涉及一个 "case" 函数,但到目前为止我无法成功地将任何东西组合在一起。
:WHERE a.variable >= 2
感谢您的时间和考虑。
要为 X 指定任意值,您确实需要使用 CASE 表达式。这是为其赋值 10 的一个:
WHERE
CAST(CASE
WHEN a.variable = 'X' THEN '10'
ELSE a.variable
END AS int) >= 2
您可以尝试这样的复合语句:
如果列是 VARCHAR:
WHERE CAST(a.variable as INT) >= 2 AND a.variable <> 'X';
更大的问题是为什么您首先要混合值。为什么不将该列专门设置为数字类型,并允许它为缺失值设置为 NULL?
下午好。也许比较简单的SQL题:
我有一个变量。它表示时间序列数据集中的月数。对于每个条目,当满足特定条件时,该计数将递增 1。它可以是从 0 到任何值的整数值,但不会超过 160。
但是,如果没有关于月数的数据,变量的值将是"X,",这就是问题所在。我正在尝试将查询与 WHERE 条件放在一起,该条件指定所述变量大于或等于 2(或 3 或 6 - 它是任意的)。正如您可能猜测的那样,SQL 无法解析 "X" 值(出于所有意图和目的,我们可以将其定义为一个非常大的数字)。
那么,如何为变量创建一个比较条件,将 "X" 值指定为任意高的数字,并在所有其他情况下保持相应的数值?我怀疑它涉及一个 "case" 函数,但到目前为止我无法成功地将任何东西组合在一起。
:WHERE a.variable >= 2
感谢您的时间和考虑。
要为 X 指定任意值,您确实需要使用 CASE 表达式。这是为其赋值 10 的一个:
WHERE
CAST(CASE
WHEN a.variable = 'X' THEN '10'
ELSE a.variable
END AS int) >= 2
您可以尝试这样的复合语句:
如果列是 VARCHAR:
WHERE CAST(a.variable as INT) >= 2 AND a.variable <> 'X';
更大的问题是为什么您首先要混合值。为什么不将该列专门设置为数字类型,并允许它为缺失值设置为 NULL?