我试图在"-"后面留下一个零。 我确实在这里检查了其他答案,但没有帮助我。
下表如下:
+---------+
| Job |
+---------+
| 3254-1 |
| 3254-25 |
| 3254-6 |
+---------+
如果最后的值在 1 到 9 之间,我需要在"-"之后留下单零
我希望结果是:
+---------+
| Job |
+---------+
| 3254-01 |
| 3254-25 |
| 3254-06 |
+---------+
您可以使用CHARINDEX()
、SUBSTRING()
和REPLACE()
作为:
CREATE TABLE Jobs(
Job VARCHAR(45)
);
INSERT INTO Jobs VALUES
('3254-1'),
('3254-25'),
('3254-6');
SELECT CASE
WHEN CHARINDEX('-', Job, 1)+1 < LEN(Job) THEN Job
ELSE
REPLACE(Job, '-', '-0')
END AS Job
FROM Jobs;
结果:
+----+---------+
| | Job |
+----+---------+
| 1 | 3254-01 |
| 2 | 3254-25 |
| 3 | 3254-06 |
+----+---------+
如果你想要更新,我认为这是最简单的方法:
update t
set job = replace(job, '-', '-0')
where job like '%-_';
此问题大大简化,因为您只添加了一个填充字符。
如果您有版本2012+
,那么format
函数可以用作:
select concat(nr1, '-', format( cast ( q2.nr2 as int ), '00')) as result
from
(
select substring(q1.str,1,charindex('-',q1.str,1)-1) as nr1,
substring(q1.str,charindex('-',q1.str,1)+1,len(q1.str)) as nr2
from
(
select '3254-1' as str union all
select '3254-25' as str union all
select '3254-6' as str
) q1
) q2;
result
------
3254-01
3254-25
3254-06
Rextester 演示