본문 바로가기

A.개발관련자료

[nestjs] typeorm AND OR BETWEEN

typeorm 사용시 where 조건문에서 and 나 or 조건문을 쓸 경우가 다수 존재한다.

그래서 간단한 코드로 하단에 정리를 해 보았다, 

 

1.typeorm에서의 AND 와 OR

AND연산의 경우 where 조건문에 object 형식으로 해당 repository에서 찾아야할 value값을 넣어줄 수 있으며,

OR연산의 경우 where 조건문에 배열 형식으로 조건 object들을 다수 나열 할 수 있다.

생각보다 간편하지만 많이 헷갈리는 부분이라 간단하게 정리하길 원하는 nestjs 초보자 분들이 계시다면 도움이 되었으면 좋겠다.

//기존 query문 and
SELECT * FROM "user"
WHERE "name" = 'pei' AND "hobby" = 'reading'

//기존 query문 or
SELECT * FROM "user" WHERE ("name" = 'pei' AND "hobby" = 'reading') OR ("name" = 'tom' AND "hobby" = 'working')

//typeorm에서의 AND 연산
userRepository.find({ where: { name: "pei", hobby: "reading" } });

//typeorm에서의 OR 연산
userRepository.find({
    where: [
        { name: "pei", hobby: "reading" },
        { name: "tom", hobby: "singing" },
    ],
});

//queryBuilder에서 의 AND 연산
createQueryBuilder("user")
    .where("user.name = :name", { name: "pei" })
    .andWhere("user.hobby = :hobby", { hobby: "reading" })
    
//상단 queryBuilder의 query문
SELECT ... FROM users user WHERE user.name = 'pei' AND user.hobby = 'reading'

//queryBuilder에서의 OR 연산
createQueryBuilder("user")
    .where("user.name = :name", { name: "pei" })
    .orWhere("user.name = :name", { name: "tom" })
    
 //상단 queryBuilder에서의 AND 연산
 SELECT ... FROM users user WHERE user.name = 'pei' OR user.name = 'tom'

2.typeorm에서의 between

database내에서 특정 기준의 숫자 값을 추릴수 있다. 날짜 검색시에도 new Date()함수를 사용하면 사이 날짜를 추릴 수 있다.

//query문에서의 beetween
SELECT * FROM "user" WHERE "age" BETWEEN 1 AND 10

//typeorm에서의 between
import { Between } from "typeorm"

const allAge = await data.getRepository(User).findBy({
    age: Between(1, 10),
})
//날짜검색 between
import { Between } from "typeorm";

const userRepository = dataSource.getRepository(User);
const users = await userRepository.find({
        where: {
            createdAt: Between(
                new Date(2022, 9, 1), 
                new Date(2022, 10, 30)
            ),
        }
})

console.log(users);