Sql MS访问-有条件浓缩
我得到了一个Access db,其中包含一列ID,如下所示: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 &
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