SQL - левая клавиша с нулем после символа '-' - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь оставить пэд с одним нулем после '-'.Я проверил здесь другие ответы, но мне это не помогло.

Вот таблица:

+---------+
|   Job   |
+---------+
| 3254-1  |
| 3254-25 |
| 3254-6  |
+---------+

Мне нужно оставить левую клавишу с одним нулем после '-', если значение находится в пределах 1и 9 в конце

Я хочу, чтобы результаты были:

+---------+
|   Job   |
+---------+
| 3254-01 |
| 3254-25 |
| 3254-06 |
+---------+

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать 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 |
+----+---------+
0 голосов
/ 25 сентября 2018

Если у вас версия 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 Demo

0 голосов
/ 25 сентября 2018

Если вы хотите обновить, я думаю, что это самый простой метод:

update t
    set job = replace(job, '-', '-0')
    where job like '%-_';

Эта проблема значительно упрощается, потому что вы добавляете только один символ заполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...