sql server 2008中的复杂模式匹配

时间:2016-02-26 15:55:50

标签: sql sql-server tsql

有人请在这种复杂的模式匹配上分享他们的专业知识。

我不确定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);

2 个答案:

答案 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 + ';%'