从包含SQL Server中字符的序列号字段中找到MAX()

时间:2018-12-11 08:30:21

标签: sql sql-server

我的表有p_no VARCHAR(50) NOT NULL列,用于存储序列号。序列号的格式为"XXX/0000/18/DEPT""XX/0001/18/DEPT"。 我想检索序列号中的整数以生成另一个序列号。有人可以帮忙吗?

这是我开始并陷入困境的代码

SELECT CASE 
WHEN SUBSTRING(p_no,0,3) = 'XXX' THEN MAX(SUBSTRING(p_no,4,4)) 
WHEN SUBSTRING(p_no,0,3) = 'XX' THEN MAX(SUBSTRING(p_no,3,4))
END
FROM tbl_project
GROUP BY SUBSTRING(p_no,0,4)

如果值为"0001""XXX/0000/18/DEPT",则预期结果为"XX/0001/18/DEPT"

3 个答案:

答案 0 :(得分:1)

您可以使用charindex来查找/的第一个位置,如果序列号的第二部分是固定的,即等于4,看起来是正确的,那么您可以应用substring进行检索:

select serialNo,
       substring(serialNo, charindex('/', serialNo) + 1, 4)
from (
  values ('XXX/0000/18/DEPT'),('XX/0001/18/DEPT')
) a(serialNo)

答案 1 :(得分:0)

使用以下命令将值获取为Integer CONVERT(INT,SUBSTRING(p_no,CHARINDEX('/',p_no,0)+ 1,4))

由于需要最大值,因此可以使用MAX(CONVERT(INT,SUBSTRING(p_no,CHARINDEX('/',p_no,0)+ 1,4)))

答案 2 :(得分:0)

如果要查找MAX值,则无需将它们分组:

DECLARE @temp TABLE
(
    p_no NVARCHAR(50)
);

INSERT INTO @temp
(
    p_no
)
VALUES
('XXX/0000/18/DEPT'),
('XX/0001/18/DEPT');

SELECT 
MAX( SUBSTRING(t.p_no, charindex('/', t.p_no)+1, 4))
FROM @temp t

输出:

0001