有人请在这种复杂的模式匹配上分享他们的专业知识。
我不确定sql是否有可能
DDL
DECLARE
TYPE name_list is table of VARCHAR2(30);
v_constraint_exists NUMBER;
existingConstraints name_list:=name_list();
dropConstraintName VARCHAR2(30);
BEGIN
SELECT constraint_name bulk collect INTO existingConstraints FROM user_constraints
WHERE constraint_name != 'some_name' AND table_name = 'some_name' AND constraint_type='U';
for i in NVL(existingConstraints.FIRST,0)..NVL(existingConstraints.LAST,-1) loop
dropConstraintName:=existingConstraints(i);
EXECUTE IMMEDIATE 'ALTER TABLE ${tableName} DROP CONSTRAINT '||dropConstraintName||' DROP INDEX';
end loop;
END
我正在尝试检查Respiration_notes是否包含正确的值
Respiration_notes应包含与第一个分号后的Remarks_1_Value相同的值和Respiration_notes中第二个分号后的Remarks_2_Value。
两个表之间的公共密钥是Type。
感谢您的建议。
输出
hPipeReadOrWrite = CreateFileA(
TEXT(PIPEPATH), //Pipepath
GENERIC_WRITE, //Access Mode
0, //ShareMode
NULL, //Security Attributes
OPEN_EXISTING, //Action on a File
0, //Type of File
NULL);
答案 0 :(得分:2)
我相信这会给你所需要的东西:
SELECT
MA.TYPE,
MA.Respiration_notes
FROM
@MASTERAPP MA
LEFT OUTER JOIN @CHILD C ON
C.TYPE = MA.TYPE AND
MA.Respiration_notes LIKE '%; ' + C.Remarks_1_Value + '; ' + C.Remarks_2_Value + '%'
WHERE
C.TYPE IS NULL
请注意,这取决于示例中的完全格式。如果在两个备注之间插入其他文本或者如果有其他空格等,那么这将不起作用。这种文本匹配的另一个原因是充其量不稳定 - 它非常脆弱。
答案 1 :(得分:0)
您正在寻找like
。我认为这是逻辑:
select ma.*, c.*
from @masterapp ma left join
@child c
on ma.Respiration_notes like '[^;]; ' + c.Remarks_1_Value + '; ' + Remarks_2_Value + ';%'