Sql MS访问-有条件浓缩

Sql MS访问-有条件浓缩,sql,regex,ms-access,Sql,Regex,Ms Access,我得到了一个Access db,其中包含一列ID,如下所示: 374452-52 362619 483726 384810 384612-18 我想将'-00'连接到并没有-dd的值的末尾。换句话说,我可以在MS Access中使用正则表达式吗 这不需要正则表达式。像一样使用: select id & '-00' from mytable where id not like '%-%'; 或者,选择所有行: select iif(id like '%-%', id, id &

我得到了一个Access db,其中包含一列ID,如下所示:

374452-52
362619
483726
384810
384612-18

我想将'-00'连接到并没有-dd的值的末尾。换句话说,我可以在MS Access中使用正则表达式吗

这不需要正则表达式。像一样使用

select id & '-00'
from mytable
where id not like '%-%';
或者,选择所有行:

select iif(id like '%-%', id, id & '-00')
from mytable;
如果愿意,您也可以使用
INSTR
而不是像
那样使用

您可以使用更新:

update t
    set id = id & "-00"
    where id not like "*-[0-9][0-9]"
您可以使用以下方法测试逻辑:

select iif(id not like "*-[0-9][0-9]", id & "-00", id) as new_id,
       t.*
from t

因此,仅当id不以破折号、数字和数字结尾时,才需要连接“-00”。Regexp将是
/-[0-9][0-9]/
/-\d\d/

在这里,我创建表,然后从中选择:

CREATE TABLE input (
  id VARCHAR(10)
);
INSERT INTO input SELECT * FROM (
          SELECT '374452-52' FROM dual
UNION ALL SELECT '362619'    FROM dual
UNION ALL SELECT '483726'    FROM dual
UNION ALL SELECT '384810'    FROM dual
UNION ALL SELECT '384612-18' FROM dual
) input;

SELECT
  IIF(
        LEFT(RIGHT(id,3),1)='-'
    AND LEFT(RIGHT(id,2),1) BETWEEN '0' AND '9'
    AND RIGHT(id,1)         BETWEEN '0' AND '9'
  , id
  , id & '-00'
  ) AS fixed_id
FROM input;

fixed_id
374452-52
362619-00
483726-00
384810-00
384612-18
374452-52
362619-00
483726-00
384810-00
384612-18