首页 > 解决方案 > 在 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 人组。

标签: sqlsql-serverstringselectcase

解决方案


为什么不使用算术?

如果您的数据库进行整数除法:

IDField / 1000 * 1000 as PolicyExplanation

如果没有:

floor(IDField / 1000) * 1000 as PolicyExplanation

如果IDField是字符串,则根据您的数据库,可能需要显式转换:

floor(cast(IDField as int) / 1000) * 1000 as PolicyExplanation

推荐阅读