我的表有一个列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)如果值为"XXX/0000/18/DEPT"和"XX/0001/18/DEPT",则预期结果为"XX/0001/18/DEPT"
发布于 2018-12-11 08:43:53
使用下面的值作为整数转换(INT,SUBSTRING(p_no,CHARINDEX('/',p_no,0) + 1,4))
由于您需要Max,所以可以使用MAX(转换(INT,SUBSTRING(p_no,CHARINDEX('/',p_no,0) + 1,4)
发布于 2018-12-11 08:37:57
您可以使用charindex查找/的第一个位置,如果序列号的第二部分是固定的,即等于4,这似乎是正确的,那么您可以应用substring检索它:
select serialNo,
substring(serialNo, charindex('/', serialNo) + 1, 4)
from (
values ('XXX/0000/18/DEPT'),('XX/0001/18/DEPT')
) a(serialNo)发布于 2018-12-11 08:50:37
如果要查找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输出:
0001https://stackoverflow.com/questions/53720142
复制相似问题