sql - 在 Select LEFT 中区分 1000 和 10000 进行分组
问题描述
我目前有一个 Select LEFT 正在抓取 ID 字段的左第一个数字。只要我们的 ID 号是 4 位数字(0 到 9999),它就可以正常工作,但是我们现在引入了 10,000 范围内的 5 位数字,而当前的 Select LEFT 无法区分 1,000 和 10,000 之间的差异。选择第一个数字的目的是按千位(1000、2000、3000、...、100000)对数字进行分组。正在发生的事情是 10000 现在被分组到 1000 组中,而不是创建新的 10000 组。请参阅下面的代码。
SELECT
LEFT(table.IDField,1) as PolicyGroup,
CASE LEFT(table.IDField,1)
WHEN '1' THEN '1000 Group'
WHEN '2' THEN '2000 Group'
WHEN '3' THEN '3000 Group'
WHEN '4' THEN '4000 Group'
WHEN '5' THEN '5000 Group'
WHEN '6' THEN '6000 Group'
WHEN '7' THEN '7000 Group'
WHEN '8' THEN '8000 Group'
WHEN '9' THEN '9000 Group'
WHEN '10' THEN '10000 Group'
END as PolicyExplanation,
cpsys_Datacurrent.IntegrationId as PolicyNumber2
ID 字段没有在数字前面填充任何内容,因此 4 位只有 4 位,5 位只有 5,但我需要能够按千人分组,包括 10,000 人组。
解决方案
为什么不使用算术?
如果您的数据库进行整数除法:
IDField / 1000 * 1000 as PolicyExplanation
如果没有:
floor(IDField / 1000) * 1000 as PolicyExplanation
如果IDField
是字符串,则根据您的数据库,可能需要显式转换:
floor(cast(IDField as int) / 1000) * 1000 as PolicyExplanation
推荐阅读
- c# - 使用 Autofac 按属性解析不同的实例
- java - 代码中的计算给出了小数点旁有许多数字的奇数答案
- django - 如何从 DateTimeField 在 django 中显示剩余的天数和小时数?
- javascript - 如何在JavaScript中使用相同的按钮触发一个点击事件?
- sorting - 数据表如何按屏幕上呈现的 mData 排序
- amazon-web-services - 通过 AWS SES SMTP 554 拒绝访问发送电子邮件
- html - 锚标记破坏 flexbox 命令(HTML 和 CSS)
- docker - 詹金斯管道构建中的“节点模块”丢失错误
- java - JAVA - 基于另一个 CSV 文件读取 CSV 文件
- c# - 如何找到表示为点集合的形状的内边界?