是这样的,某物品的编码是规则 的,
由ABC+流水号(3位长度)但由于某单在建后删除了,所以会漏好多号,如何用SQL语句查出这些单号?数据结构如下:AutoID Pcode
------- ------------------
1 ABC0001
2 ABC0002
4 ABC0004
6 ABC0006
-------------------
请问,如何查询出ABC0003,和ABC0005 ?
由ABC+流水号(3位长度)但由于某单在建后删除了,所以会漏好多号,如何用SQL语句查出这些单号?数据结构如下:AutoID Pcode
------- ------------------
1 ABC0001
2 ABC0002
4 ABC0004
6 ABC0006
-------------------
请问,如何查询出ABC0003,和ABC0005 ?
解决方案 »
- 格式化函数求救。如何将20060521011202格式化为:2006-5-21 1:12:02或2006-05-21 01:12:02
- 怎么用sql语句描述成以下结果,大虾们瞧瞧咯
- 去除重复记录的sql语句,急!
- 找出用'a'或'b'开头的用'[ab]_',那如果要找出用'11','12'或'31'开头的呢?
- 关于MSSQL中几个初级的概念问题
- SQl Server流水号问题
- mssql错误:通过更新改变了字段但是原先内容又存在,但数据库中实际上没有,怎么解决呢?
- 密码应该放在一个表里吗?
- 如何优化下面这条语句?
- delphi组件里的win32和win31有什么区别啊??另外数据库连接的工具中如果和sql server连接用哪个工具呢 ?
- 求存储过程,赶项目。急 急 急
- 类似csdn的帖子列表查询问题
GO
CREATE TABLE TB(AutoID INT, Pcode VARCHAR(50))
INSERT INTO TB
SELECT 1, 'ABC0001' UNION ALL
SELECT 2, 'ABC0002' UNION ALL
SELECT 4, 'ABC0004' UNION ALL
SELECT 6, 'ABC0007' SELECT
'ABC'+RIGHT('0000'+CONVERT(VARCHAR(50),T2.NUMBER),4)
FROM TB T1
RIGHT JOIN (
SELECT NUMBER FROM MASTER..SPT_VALUES WHERE TYPE='P'
) T2 ON CONVERT(INT,STUFF(T1.PCODE,1,3,'') )=T2.NUMBER
WHERE T2.NUMBER<=(SELECT MAX(CONVERT(INT,STUFF(PCODE,1,3,'') )) FROM TB)
AND T2.NUMBER>=(SELECT MIN(CONVERT(INT,STUFF(PCODE,1,3,'') )) FROM TB)
AND T1.AUTOID IS NULL
/*
ABC0003
ABC0005
ABC0006
*/
insert into tb values(1 , 'ABC0001')
insert into tb values(2 , 'ABC0002')
insert into tb values(4 , 'ABC0004')
insert into tb values(6 , 'ABC0006')
goselect pcode = left(m.pcode,3) + right('000'+cast(cast(right(m.pcode,4) as int) + 1 as varchar),4) from
(select * , px = (select count(1) from tb where AutoID < t.AutoID) + 1 from tb t) m,
(select * , px = (select count(1) from tb where AutoID < t.AutoID) + 1 from tb t) n
where m.px = n.px - 1 and m.autoid <> n.autoid - 1drop table tb /*
pcode
--------------
ABC0003
ABC0005(所影响的行数为 2 行)
*/
-- Author: Ken Wong
-- Create date: 2009-12-17 11:36:07
-- Description:
/*====================================================*/
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([AutoID] int,[Pcode] varchar(7))
insert [tb]
select 1,'ABC0001' union all
select 2,'ABC0002' union all
select 4,'ABC0004' union all
select 6,'ABC0006'select 'ABC'+ right('0000'+LTRIM(number),4) as AutoID
from master..spt_values
where type = 'P'
and number >=(select min(AutoID) from [tb])
and number <=(select max(AutoID) from [tb])
and number not in (select AutoID from [tb])------------------------------
ABC0003
ABC0005