아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
완강한나비87
완강한나비8721.03.27

mssql datetime 데이터타입에서 포맷을 지정하여 저장할 수 있나요?

mssql datetime 이라는 데이터 형식에 날짜를 저장하는데

여러 데이터를 저장하면 datetime에서 나노초(?) 단위에서 차이가 발생해

중복 제거가 안되는 듯 합니다.

혹시 데이터베이스의 데이터타입에서 나노초를 제거하여 저장 할 수 있는 방법이 있나요?

아니면 여러 데이터 중 한 테이블을 기준으로 중복제거를 하는 방법이 있을까요?

사용 언어는 .net core를 사용하며 Distinct()함수를 이용하였습니다.

datetime에는 "년도-월-일-시간-분" 까지만 저장되면 좋겠습니다.

55글자 더 채워주세요.
답변의 개수
7개의 답변이 있어요!
  • 탈퇴한 사용자
    탈퇴한 사용자21.03.27

    DateTime 구조체에서 Distinct()를 사용시 특정 프로퍼티를 선택해서 select를 할 수 있습니다.

    (아래 예에서는 Orders에는 DateTime 타입의 프로퍼티인 OrderDate라는 필드가 있다고 가정합니다.)

    만약 연도를 기준으로 distinct 를 한다면 아래와 같이 짤 수 있을 것입니다.

    var uniqueYears = db.Orders.Select(s => s.OrderDate.Year).Distinct();

    질문에서 연도, 월, 일, 시간, 분까지만 Distinct() 하고 싶으신 것이므로 해당 조건으로만 대상을 줄이면 되겠습니다.

    아래의 코드에서는 DateTime(Int32, Int32, Int32, Int32, Int32, Int32) 생성자를 이용하였습니다.

    var uniqueYears = db.Orders .Select(s => new DateTime(s.OrderDate.Year, s.OrderDate.Month, s.OrderDate.Month, s.OrderDate.Hour, s.OrderDate.Minute, 0)) .Distinct();


  • 일반적으로 사용하는 방식으로 시간 + 시퀀스 넘버링이 가장 안전하고 정확한 것으로 알고 있습니다.

    데이터 타입 나노초를 제거한다고하여, 해당 값이 완전히 중복 값을 제거 했다는 무결성을 보장할수 없기 때문입니다.

    따라서 사용하고 있는 시간에다가 시퀀스 넘버링을 추가하는 방법을 고안하는 것이 더 좋을 것 같습니다.

    데이터 처리 속도 보장보다는 데이터 무결성이 더 중요 합니다.


  • SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') --20210328 , TO_CHAR(SYSDATE, 'YYYY/MM/DD') --2021/03/28 , TO_CHAR(SYSDATE, 'YYYY-MM-DD') --2021-03-28 , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') --2021-03-28 11:10:52 FROM dual

    YYYY: 년, MM: 월, DD: 일, HH24: 24시간, HH: 12시간, MI: 분, SS:초


  • 안녕하세요.

    1. 우선 중복 제거를 해야하는 데이블의 데이터에 datetime 형태의 컬럼이 포함되지 않는다면 해당 컬럼을 제외하고 조회하여 중복제거를 하시면 될 것으로 보입니다.

    2. 이야기 하신 것 보면 데이터를 insert 시 datetime 컬럼에 insert 시간을 넣는 것 같은데 시간을 넣을 때 getdate() 같은 함수를 사용 하신다면 해당 함수로 가져와서 변형해서 넣으면 될 것으로 보입니다.

    3. 마지막으로 위 두가지를 사용하지 않으려면 데이터 insert 후 조회 시 해당 컬럼의 데이터에서 분 이하를 제외하고 조회하시면 될 것 같습니다.


  • datetime 컬럼 데이터 타입으로 설정해서 select 조회를 하면 말씀대로 년월일 시분초가 표시되어서

    일반적으로 중복 제거가 안됩니다.

    해당 문제를 해결하려면 mssql 에 convert를 사용하면 해결 할 수 있습니다.

    select convert(varchar(16), getdate(), 120) 로 하시면 년-월-일 시:분 으로 표시가 되어서 중복 제거가 가능하실 겁니다.


  • 테이블 날짜 컬럼에 저장할때 convert 해서 밑에 방식으로 저장을 하면

    초까지만 저장 되기 때문 distint 해도 초단워로 분류가 되서 문제가 없을같습니다.


    CONVERT(CHAR(19), DATETIME, 120)

    2000-01-02 13:14:15

    YYYY-MM-DD HH:MM:SS


  • 안녕하세요

    Mssql에서 원하시는 데이터를 얻기 위해서 아래와 같이 사용하시면 원하는 년도,월,일,시간,분까지 나올 것입니다.

    24시를 기준으로 하는 것임을 참고 부탁드립니다.

    convert(varchar(16), getdate(), 120)

    Datetime 변환하는 형식이 많으니 찾아서 원하시는 결과 얻으시길 바래요!