Database 不同的聚合函数取决于数据类型
我有一个T-SQL脚本,它返回表中的所有列,以及数据类型和最大值Database 不同的聚合函数取决于数据类型,database,tsql,aggregate-functions,Database,Tsql,Aggregate Functions,我有一个T-SQL脚本,它返回表中的所有列,以及数据类型和最大值max(DATALENGTH))从sys.columns和sys.types获取它 但是,ints的最大值始终为4,因为ints使用4个字节。在这种情况下,我希望列中的数值最高 我想我可能会将查询更改为对基于字符串的列使用DataLength,对基于数字的列使用MAX() 缩小示例代码 如果1=1为真,我希望收到数字1。 相反,我得到了一个错误 操作数数据类型位对于max运算符无效 我知道你一点也不能运行MAX(@A),但这不是我想
max(DATALENGTH))
从sys.columns
和sys.types
获取它
但是,ints的最大值始终为4,因为ints使用4个字节。在这种情况下,我希望列中的数值最高
我想我可能会将查询更改为对基于字符串的列使用DataLength
,对基于数字的列使用MAX()
缩小示例代码
如果1=1
为真,我希望收到数字1。
相反,我得到了一个错误
操作数数据类型位对于max运算符无效
我知道你一点也不能运行MAX(@A)
,但这不是我想要做的。我的目标是根据数据类型运行不同的聚合函数
如何解决此问题?在这种情况下,您缺少一个演员阵容:
SELECT CASE WHEN 1=1 THEN MAX(DATALENGTH(@A)) ELSE MAX(CAST(@A as bigint)) END
在这种情况下,您缺少一个强制类型转换:
SELECT CASE WHEN 1=1 THEN MAX(DATALENGTH(@A)) ELSE MAX(CAST(@A as bigint)) END
我的目标是根据数据类型运行不同的聚合函数
这将失败,因为您将获得无效的强制转换错误,或者将获得到最高优先级数据类型的隐式转换
您对位的使用与此处无关
所以这段代码在混合数据类型时会给出奇怪的结果
DECLARE @foo table (
intval int,
floatval float,
datetimeval smalldatetime)
INSERT @foo VALUES
(1, 1.567E2, '2017-07-31'),
(2, 2.0, '2017-08-01');
DECLARE @Switch int;
SELECT
CASE
WHEN @Switch=1 THEN MAX(intval)
WHEN @Switch=2 THEN MAX(floatval)
ELSE MAX(datetimeval)
END
FROM
@foo
SET @Switch = 1
1900-01-03 00:00:00
SET @Switch = 2
1900-06-06 16:48:00
SET @Switch = 3
2017-08-01 00:00:00
我的目标是根据数据类型运行不同的聚合函数
这将失败,因为您将获得无效的强制转换错误,或者将获得到最高优先级数据类型的隐式转换
您对位的使用与此处无关
所以这段代码在混合数据类型时会给出奇怪的结果
DECLARE @foo table (
intval int,
floatval float,
datetimeval smalldatetime)
INSERT @foo VALUES
(1, 1.567E2, '2017-07-31'),
(2, 2.0, '2017-08-01');
DECLARE @Switch int;
SELECT
CASE
WHEN @Switch=1 THEN MAX(intval)
WHEN @Switch=2 THEN MAX(floatval)
ELSE MAX(datetimeval)
END
FROM
@foo
SET @Switch = 1
1900-01-03 00:00:00
SET @Switch = 2
1900-06-06 16:48:00
SET @Switch = 3
2017-08-01 00:00:00
什么问题?如果你选择了一个未知问题的解决方案,我们所拥有的一切是什么?如果您选择了解决未知问题的解决方案:案例
不能可靠地提供短路评估,我们所拥有的一切。请参阅和。旁白:案例
无法可靠地提供短路评估。看,还有。