我的表有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"
答案 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