php - MS SQL CONCAT와 "+"쿼리 차이 (doctrine 2 사용)


php - MS SQL CONCAT와 "+"쿼리 차이 (doctrine 2 사용)




최초 작성일 : 2021-09-10 | 수정일 : 2021-09-10 | 조회수 : 404

Doctrine 2 인터페이스를 사용하여 MS SQL 데이터베이스에 액세스하고 있다.
Doctrine 2와 MS SQL 양쪽에서 꽤 흥미로운 문제를 발견했다 .

어떤 이유로 질의를 바꾸는 교리 2

  1. $this->getEntityManager()->createQueryBuilder()
  2. ->from(table::class, 'il')
  3. ->select('CONCAT(il.col1,il.col2,il.col3) AS concated')
  4.  

(자체 별칭을 사용하는) 것과 같은 것으로 변경 :

  1. SELECT (t0_.col1+ t0_.col2+ t0_.col3) AS sclr_0 FROM tableName t0_
  2.  

가장 중요한-그것은 CONCAT 를 변경  '+'로 표현한다.
그러나 연결된 문자열을 다른 테이블의 값과 비교하고 싶을 때까지 정상적으로 작동한다 (또는 작동하는 것처럼 보입니다).

  1. $targetQueryBuilder->getEntityManager()->createQueryBuilder()
  2. ->from($namespace, 's')
  3. ->select('1')
  4. ->where('CONCAT(il1.col1, il1.col2, il1.col3) = s.controlValue')
  5. ->andWhere('s.tableName = :tablename')
  6. ->andWhere('s.tableRowIdentifier='.$rowIdentifier);
  7.  

(문제가있는 경우 메모리 에서이 쿼리를 작성하고 있습니다-중요하지 않습니다-문제를 시각화하는 것입니다) CONCAT 에서 SQL Studio에서 원시 쿼리를 실행하면 완벽하게 작동한다.
 기능. '+'로는 그렇지 않다.
nvarchar 형식의 모든 연결된 열 문제는 : 차이점은 어디에 있습니까?

지도 CONCAT 를 건너 뛰기 위해 교리에서 엄청난 양의 조합을 확인했다 .  '+'로 성공했지만 성공하지 못했다 . CONCAT 를 강제하기 위해 더미 렉서 확장을 작성해야했다 .  최종 검색어에 적용 할 함수이다.

추가적인 (아마도 SQL 서버에 따라 다름) 문제는 다음과 같다.
테스트 할 때

  1. SELECT
  2. (i1_.NameUnternehmen + i1_.Land + i1_.Ort + i1_.Straße + i1_.Postleitzahl) AS a,
  3. CONCAT(i1_.NameUnternehmen , i1_.Land , i1_.Ort , i1_.Straße , i1_.Postleitzahl) AS c
  4. FROM tablename
  5.  

( Straße )  이 문제에서는 열 이름이 중요하지 않은 것 같다.
) WHERE 문을 사용하여 연결된 문자열을 제어 값과 비교할 때 선택 결과가 다릅니다.

->where('CONCAT(il1.col1, il1.col2, il1.col3) = s.controlValue')  -모든게 정확 해

->where('(il1.col1 + il1.col2 + il1.col3) = s.controlValue')  -열 'a'의 결과가 널이다.
방금 테스트했으며 다른 테이블에서는 때로는 null이 아닙니다.
이유를 모르겠습니다.
'c'열은 항상 정확한다.

닉네임:
댓글내용: