sql - 计算一个单元格中的值
问题描述
我还是 SQL 新手,我正试图弄清楚如何计算一个单元格中的值。不要介意我试图计算数据的 Excel 公式,这样我就不必通过 SQL。
这就是我想出的,但它计算的是整列而不是单元格。
SELECT COUNT(Binlocation1) FROM BinLoc
解决方案
这是 Microsoft SQL Server 方言的解决方案:
SELECT
-- Include any existing columns in the table.
*,
-- Calculate a new column: 'BinLocationQuantity'.
(DATALENGTH(BinLocation1) - DATALENGTH(REPLACE(BinLocation1, ', ', ''))) / DATALENGTH(', ') + 1
AS BinLocationQuantity
FROM BinLoc
这个想法是
- 确定
', '
分隔符对字段中文本长度的贡献程度BinLocation1
。我们通过获取(a)字段长度和(b)删除所有出现的分隔符后的字段长度之间的差异来做到这一点(REPLACE
d 与空''
字符串)。这里我们使用DATALENGTH()
而不是LEN()
,以避免混淆空格。 - 确定有多少这样的分隔符。我们通过获取所有分隔符贡献的总长度(以上),然后将其除以单个分隔符的长度来做到这一点
DATALENGTH(', ')
: BinLocation1
推断文本中有多少值。我们通过添加1
分隔符的数量(以上)来做到这一点:
-- 1 2 3 4 N + 1
'value1, value2, value3, value4, ..., valueN'
-- ^^ ^^ ^^ ^^
-- 1 2 3 N
警告
假设必须坚持每个BinLocation1
文本的形式
'value1, value2, value3, value4'
并且没有任何缺失的分隔符
'value1 value2, value3value4'
-- ^ ^
也没有任何额外的分隔符:
', value1, value2, , value3, value4, '
-- ^^ ^^ ^^
推荐阅读
- azure-devops - 如何指定哪个版本的 nuget.exe 与 Azure DevOps 中的自托管代理一起使用?
- pyspark - 如何创建具有行号inf pyspark的列
- apache-spark - 如何在火花中实现具有多个条件的try catch
- python - 将多个数据帧传递给函数
- google-apps-script - 在 Google 表格中创建行和根据用户输入填充数据的应用脚本代码中找不到错误
- angular - 如何设置 PrimeNG 主题?
- amazon-web-services - 无法从 EC2 上的公共 IP 地址访问 node_exporter
- php - PHP CURL errno 返回无法解析主机
- amazon-cloudformation - 无法识别的资源类型
- excel - Excel VBA复制一张纸的第一行数据并粘贴到另一张纸上