2015-01-12 3 views
1

임 테이블에서 중복 DATETIME 행을 찾으려고SQL Server에서 datetime 중복 행을 얻는 방법?

내 열은 2015-01-11 11:24:10.000과 같은 datetime 값을 갖습니다.

필자는 2015-01-11 11:24 유형으로 중복을 받아야합니다. 나머지는 중요하지 않습니다. SELECT을 'convert (nvarchar (16), column, 121)'와 함께 사용하면 올바른 값을 얻을 수 있지만 코드에 넣으면 '그룹 by'문을 사용해야합니다.

내 코드는 다음과 같습니다

SELECT ID, 
     RECEIPT_BARCODE, 
     convert(nvarchar(16),TRANS_DATE,121), 
     PTYPE 
    FROM TRANSACTION_HEADER 
    WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015' 
GROUP BY ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121),PTYPE 
    HAVING COUNT(convert(nvarchar(16),TRANS_DATE,121)) > 1 

SQL 날 GROUP BY 성명에서 '변환 (NVARCHAR (16), TRANS_DATE, 121)'를 사용하도록 강제하기 때문에, 내가 중복 값을 얻을 수 없습니다.

어떤 아이디어입니까?

미리 감사드립니다. 당신이 실제 행이 중복되는 다음 대신 윈도우 기능을 사용하려면

+2

ANSI SQL은 convert를 지원하지 않습니다. 정답을 얻으려면 사용중인 dbms를 지정하십시오. – jarlh

답변

1

:

SELECT th.*, convert(nvarchar(16),TRANS_DATE,121) 
FROM (SELECT th.*, COUNT(*) OVER (PARTITION BY convert(nvarchar(16),TRANS_DATE,121)) as cnt 
     FROM TRANSACTION_HEADER th 
     WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015' 
    ) th 
WHERE cnt > 1; 
+0

고마워요 !!! 그것은 효과가 있었다. –

0
SELECT ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE ,COUNT(*) 
FROM TRANSACTION_HEADER 
WHERE TRANS_DATE BETWEEN '11.01.2015' AND '12.01.2015' 
GROUP ID,RECEIPT_BARCODE,convert(nvarchar(16),TRANS_DATE,121), PTYPE 
HAVING COUNT(*)>1; 

을 당신이 직접 위를 here.try COUNT (*)를 사용할 수 있다고 생각합니다.

+0

이것은 하나의 예외를 던지지만, 방금 해결책을 얻었습니다. 고려해 주셔서 고맙습니다. –

+0

환영 메이트, 그게 뭐라고 말씀해 주시겠습니까? –

+0

나는 너를 고쳤고 지금은 예외를 얻지 못하고있다. 그러나 didnt 한 어느 쪽의 결과라도 어느 쪽이라도 :( –

관련 문제