【问题描述】
针对该超市各卡种数量过大请求先检索、后再行决策是否删除僵尸卡。 该超市各类卡种(会员卡、储值卡)数量合计达到151万张,开新店时数据交换量过大造成失败,可否给予语句检索出三年未使用的卡种进行数量登记 。
请将备份数据库在测试的电脑上还原后进行查询核对,防止正在使用的会员出现异常,以下语句分两步执行
USE hbposev9
–1.解密
if exists(select 1 from sysobjects where id=object_id(‘f_get_descry_star’))
drop function f_get_descry_star
go
create function f_get_descry_star(@as_source varchar(50))
returns decimal(16,4)
WITH ENCRYPTION
as
begin
if @as_source is null or @as_source=” return 0
declare @i int,@ll_len int
declare @ls_text varchar(50),@ls_result varchar(50)
select @ls_text=ltrim(rtrim(@as_source))
select @ll_len=len(@ls_text)
select @ls_result=”
select @i=1
while @i<=@ll_len
begin
select @ls_result=@ls_result+char(ascii(substring(@ls_text,@i,1)) – (2 * (@ll_len – @i – 2)))
select @i=@i+1
end
select @ls_result = reverse(@ls_result)
return cast(@ls_result as decimal(16,4))/10000
end
GO
select dbo.f_get_descry_star(residual_amt),residual_amt,* from t_rm_vip_info
–2.查询消费最新时间小于2015-01-01且余额小于0.5的所有类别会员卡
SELECT dbo.f_get_descry_star(residual_amt) AS 卡余额,* FROM t_rm_vip_info WHERE dbo.f_get_descry_star(residual_amt)<0.5 AND card_id IN (
SELECT card_id FROM (
SELECT card_id,max(pay_time) AS 卡消费最新时间 FROM t_rm_card_paylist
GROUP BY card_id
HAVING max(pay_time)<‘2015-01-01’) aaa)