问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

SQL取字段中某一部分特定数值

发布网友 发布时间:2022-04-08 18:46

我来回答

6个回答

懂视网 时间:2022-04-08 23:07

。为了让明细数据显得更自然,当然不能简单粗暴的把一段连续时期内的单据统统删除,或者把大量单据的折扣改低以符合目标,那样太粗暴,弄巧成拙就不好了。

我设想的是,按一定时间粒度(如日、周、月、季度)划分单据,然后从每个区间内查出一定比例的单据,然后与目标比对,根据比对情况逐步调整粒度与比例,直至符合目标为止。这样就得到了需要保留的单据,剩下就是把查询区间内的其余单据删除即可。当然也可以将当前数据与目标数据相减,得到需要砍掉的数据,完了以该数据作为目标来查询单据,这样就能直接得到需要删除的单据。我采用的是前一种,即得到需要保留的单据,完了也就一个where not in的事,不费力。上代码:

WITH cte AS ( --按一定时间粒度分组(日、周、月、季度等)
SELECT ROW_NUMBER() OVER(PARTITION BY DATEPART(week, 单据日期) ORDER BY 单据编号) AS ‘RowNo‘
,DATEPART(week, 单据日期) AS ‘Rang‘, 单据日期, 单据编号, 成交金额
FROM 主单表
WHERE 营业点=‘xxx‘
AND YEAR(单据日期)=2015
),cte2 AS ( --得到每组的单据数,作为分母
SELECT Rang,COUNT(1) AS ‘BillCount‘ FROM cte GROUP BY Rang
)
SELECT a.*,BillCount
FROM cte a
JOIN cte2 b ON b.Rang = a.Rang
WHERE RowNo/CAST(BillCount AS DECIMAL(16,4)) < 0.81 --按比例取每组的部分行,billcount是int,需转换为小数再除

时间粒度就修改datepart函数的第1个参数(day/week/month/quarter等),注意有2处,比例就修改最后那个0.81,很简单,说一下都多余。

我的环境是SQL08R2,如果有更正确的姿势,还望大侠提点,感谢。

【T-SQL】分布抽取部分数据

标签:

热心网友 时间:2022-04-08 20:15

如果只是固定取"20/30"比较容易, 只需找到"20/30"在此字符串的开始位置,再截取5个字符的长度就可以了,如:
SELECT CASE WHEN CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30') > 0 THEN SUBSTRING('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', CHARINDEX('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg', '20/30'),5) ELSE '' END

如果不一定是20/30,而是与"/"前后关联的数字(eg: 14/20, 33/66,等...),就麻烦了,你可能需要写一个抽取字符串的函数,如: f_substr(),然后在SQL里调用:
select 用户.f_substr('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg')

热心网友 时间:2022-04-08 21:33

SUBSTRING
返回字符、binary、text 或 image 表达式的一部分。有关可与该函数一起使用的有效 Microsoft® SQL Server™ 数据类型的更多信息,请参见数据类型。

语法
SUBSTRING ( expression , start , length )

参数
expression

是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。

start

是一个整数,指定子串的开始位置。

length

是一个整数,指定子串的长度(要返回的字符数或字节数)。

select substring('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg',23,5)

热心网友 时间:2022-04-08 23:08

一楼的是固定长度的
要是之前或之后长度都不固定,可以这样写
instr(str,'/',0,-1)找到'/'的位置
select subStr( str ,instr(str,'/',1,1)-2 ,5)
from ……
这句话是取/附近5个字符的代码!
有此数据库不支持instr可以用:
CHARINDEX

热心网友 时间:2022-04-09 00:59

如果/能够保证在字段中唯一出现的话可以:

SubString('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg',
CharIndex('/',mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg)-2,5)

可以查查
CharIndex
patindex
的使用

热心网友 时间:2022-04-09 03:07

select substring('mgdf13hj44jjjgasetrxzc20/30nj5weyu45f5645gjhkdfjkg',23,5)
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...频数和频率成正比,2频数一定时,频率与总次数成反比,对不对_百度... ...总次数之间的关系是( ) A.频数越大,频率越大 B.总次数一定时,频数越... 实验的总次数、频数及频率三者的关系是( )A.频数越大,频率越大B.频数... 嘎牙鱼的做法大全 安无线网要用多少元网费要交多少元不用用了要不要交网费,想寻求大家的... 无线网费1年多少钱 "Hbr"作为“港”的缩写,其在英语中的使用频率和应用示例如何? 【车主点评:吉利汽车帝豪GL 使我荣华富贵】 请问,如果,家用,自动挡,帝豪gl,英朗,科沃兹,卡罗拉,轩逸,同等价位,建议... ...景点?既能休闲的时候看看又能长点知识@@谢谢各位了! 微信绑定银行卡,显示什么已经身份证信息绑定5个什么意思 怎么查询银行卡绑定了几个? 两个微信可以绑定一个银行卡吗 怎样查询银行卡绑定了几个? 一张银行卡,绑定了两个,其中一个号提现零钱,另外一个号会不会有提醒? 腾讯微信一个银行卡可以绑定几个 腾讯微信一个银行卡可以绑定几个 一张银行卡可以绑定几个?如何设置只能绑定一个? 笔趣阁app怎么下不了小说了? 性激素分泌的分级调节 笔趣阁软件有病毒吗 激素的三种本质 玩具枪水炮但应该坐哪里 危险的玩具砸炮枪作文 胰岛素和性激素都是生物激素,它们的化学本质是 左轮枪? 80年代出生的农村孩子一般玩具大多是什么? 请问这个是什么,小时候玩具枪的圈圈 有一种会冒火星的左轮手枪玩具,90后80后小时候玩的叫什么名字? 胰岛素和性激素都是生物激素,它们的化学本质分别是 excel中单一单元格的乘法计算怎么弄 如何在EXCEL的一个单元格里进行乘法运算处理? excel在一个单元格中有乘法式子怎么算乘法 如何在excel的单元格内计算乘法 苹果6 plus进水后一直重启怎么办? 苹果6PLUS不小心进水花屏跳屏自动重启怎么办哪修 苹果6总是自动重启怎么回事?之前进水拿去修回来充过电开机之后就总是重启 苹果6进水了以后开机一直是开机屏幕是怎么回事啊?? 猴头菇和什么材料煲汤较好? 我家是昆明的,第一次到山东烟台看人家,那里的风俗是什么,我们要怎么做? 烟台的端午习俗有哪些?拜托各位大神 亿健跑步机恢复原厂设置之后启动不了该怎么办 我想知道咱烟台有哪些民俗? 烟台春节的风俗有哪些?麻烦诸位!急呀!!! 有人知道烟台的订婚结婚风俗吗? 烟台地区定亲风俗:一定要烟台的朋友回答! 烟台地生孩子都有什么习俗,各位亲们指点指点。 抖音拍同款动作为什么会反 百度网盘这种代码怎么使用? 什么颜色比较温馨?