Q&A

  • Null에 대한 질문 입니다.
수고 많습니다.
Q/A에 찾아보니 Null 사용에 대한 여러가지을 찾았습니다.
그런데 궁금한것은
퀴리에서
1 isNull(Matr_Color,'');
1 is Null(Matr_Color,'');
2 (Matr_Color,is Null);
2 (Matr_Color, isNull);
3 where Matr_Color is Null;
3 where Matr_Color isNull;

이것이 무슨 차이가 있는지 간단 설명을 부탁 드립니다.
그리고
with Query1 do  
       begin
       Close;
       Sql.Clear;
       Sql.Add('select * From StoNow                                ');
       Sql.Add('where Matr_Code =:p1 and Matr_Size =:p2   ');
       Sql.Add('and isNull(Matr_Color =:p3, '')                    ');
       ParamByNAme('p3').asstring  :=SCells[29, i4];
       ParamByNAme('p1').asstring  :=SCells[27, i4];
       ParamByNAme('p2').asstring  :=SCells[28, i4];
       Open;
이렇게 했습니다.
isNull(Matr_Color =:p3, ''); 이부분에서 에러가 발생합니다.
'Missing right Quote'
제가 원하는것은 Matr_Color가 값이 있을수 있고 없을 수가 있습니다.
값이 있을때는 있는 값을 가지고 오고 없을때는 없는 값을 가지고 오며 되는데
...
퀴리에서 Null 사용법을 알고 싶습니다.

많은 답변을 부탁 드립니다.

아래는 하고 안되어서 편법을 동원 하였습니다.
그럼 수고 하세요
감사 합니다.

with Query1 do  
       begin
       Close;
       Sql.Clear;
       Sql.Add('select * From StoNow                      ');
       Sql.Add('where Matr_Code =:p1 and Matr_Size =:p2   ');
        if test3 <> '' then
          begin
          Sql.Add('and Matr_Color =:p3                    ');
          ParamByNAme('p3').asstring  :=SCells[29, i4];
          end
        else if test3 = '' then
                  begin

                   end;
        ParamByNAme('p1').asstring  :=SCells[27, i4];
        ParamByNAme('p2').asstring  :=SCells[28, i4];
        Open;
3  COMMENTS
  • Profile
    최병철 2002.11.21 18:43
    먼저 ISNULL()함수는 MS-SQL Server에서 사용하는 함수 입니다.

    ISNULL(파라메타-1,파라메타-2)의 내용을 보면
    파라메타-1값이 NULL값(즉,공백이 아닌 NULL값)이면
    파레메타-2의 값을 리턴받아서 출력하는 함수입니다.

    참고로
    Sql.Add('and isNull(Matr_Color =:p3, '') 의 코딩은 좀 문제가
    있는것 같은데,
    님의 의도가 무엇을 표현 할 예정인지는 모르겠군요.

    오늘도 즐겁게.......


  • Profile
    Galaxy 2002.11.21 20:47
    안녕하세요 수고 많습니다.
    좋은 답변에 감사 드립니다.

    제가 의도한 것은 이렇습니다.
    아래는 그리드도 되고 Table Column도 해당 됩니다.

    Matr_Code               Matr_Size                     Matr_Color
    AAA                        1.6*10*20
    AAA                        1.6*10*20                      Black
    AAA                        1.6*10*20                      Red
    BBB                        1.6*10*20                      Green
    BBB                        1.6*10*20              
    BBB                        1.6*10*20                      Yellow
    BBB                        1.6*20*10                      Yellow
    BBB                        1.6*20*10                      Green
    BBB                        1.6*20*10                      Red
    BBB                        1.6*20*10                  
    .............................................................................

    이렇게 데이타가 있을때 Matr_code,Matr_Size는 같은데
    칼라가 있을때, 없을때가 있습니다.

    제가 원하는 것은 이렇습니다.
    Matr_Color =:p3  <<<< BBB, 1.6*20*p3 =Yellow
    Matr_Color =:p3  <<<< BBB, 1.6*20*p3= ''

    해당되는 칼라가 있을때  코드, 사이즈, 칼라
    해당되는 칼라가 없을때  코드, 사이즈, ''

    존재 여부을 확인을 하는 것 입니다.
    존재 여부에 따라서
    이하 단의 소스가 진행이 되는 것 입니다.

    칼라가 있을때는 문제가 없습니다.
    문제는 칼라가 없을때 일 입니다.
    칼라가 없을경우에도 칼라가 없는제폼으로 인정이 되는 것이죠
    :p3부분에 널이 들어갈 경우에는 RecordCount가 '0' 로 나오니
    문제이죠,분명이 해당되는 제품이 있는데.........
    그래서 편법을 쓴것 입니다.

    너무 장문을 쓴것 같습니다.
    다른 분들은 이해을 못할 것 같은데...
    죄송합니다.

    그럼 수고 하세요





  • Profile
    열심히 2002.11.21 03:55
    님이 원하시는게 정확하게 무슨 뜻인지는 잘모르겠지만요..ㅡ,.ㅡ;;

    일단은 오라클 문법은 아닌듯 하군염..

    바꾸신 쿼리를 보니 대충은...알만하네염...

    밑에 사용하신 isNull()이란 함수가 뭔지는 모르겠지만요..


    select * From StoNow                                
    where Matr_Code =:p1 and Matr_Size =:p2  
    and isNull(Matr_Color =:p3, '')

    마지막줄 원래는 이렇게 쓰는거 아닌가염??                    

    and isNull(Matr_Color,'') =:p3

    비슷한 함수가 오라클에 있어서 말씀드린거구요....

    그리고 님의 의도가 조금 애매한데요..
    님이 바꾸신거 하고 제가 생각하는(위에 조건절) 것이 맞다면..
    둘은 의미가 다른겁니다..
    위에것은 위제 두줄로 가지고 온 자료에서 만약에 p3가 '' <-라면
    널값과 공백값만을 가지고 오는거구요..

    밑에 다시 만드신 쿼리는 같은 조건 이었을때(p3 = '') 위의 두줄로 가지고 온
    자료에서 아무것도 제하는게 없게 되거든요..

    다시 한번 찬찬히 생각해보세요..