SQL Server에서 날짜 시간에서 밀리초 제거
select *
from table
where date > '2010-07-20 03:21:52'
결과가 나오지 않을 것으로 예상됩니다날짜가 적힌 레코드를 받는 것만 빼면요2010-07-20 03:21:52.577
쿼리를 밀리초 단위로 무시하려면 어떻게 해야 합니까?
다음과 같이 날짜의 밀리초 부분을 계산하고 비교하기 전에 빼기만 하면 됩니다.
select *
from table
where DATEADD(ms, -DATEPART(ms, date), date) > '2010-07-20 03:21:52'
SQL 서버(2008년부터)를 사용하는 경우 다음 중 하나를 선택합니다.
- 변환(DATTIME2(0), 사용자 날짜 필드)
- 왼쪽(RTRIM(변환(DATIMEOFSET, 사용자 날짜 필드)), 19)
- CONVERT(DATIMEOFSET(0), YourDateField) - 표준 시간대 오프셋을 추가합니다.
시도:
SELECT *
FROM table
WHERE datetime >
CONVERT(DATETIME,
CONVERT(VARCHAR(20),
CONVERT(DATETIME, '2010-07-20 03:21:52'), 120))
또는 날짜가 실제 날짜 시간 값인 경우:
DECLARE @date DATETIME
SET @date = GETDATE()
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(20), @date, 120))
120번 스타일로 변환하면 밀리초가 단축됩니다.
select * from table
where DATEADD(ms, DATEDIFF(ms, '20000101', date), '20000101') > '2010-07-20 03:21:52'
비교하기 전에 밀리초를 잘라야 하며, 이는 많은 행에서 느려집니다.
이 문제를 해결하려면 다음 중 하나를 수행합니다.
- 비교하기 위해 위의 식을 사용하여 계산된 열을 만들었습니다.
- 읽기 오버헤드를 방지하기 위해 삽입/업데이트 시 밀리초 제거
- SQL Server 2008의 경우
CAST는 다음 파라미터와 함께 사용합니다.
날짜.
select Cast('2017-10-11 14:38:50.540' as date)
출력: 2017-10-11
날짜/시간
select Cast('2017-10-11 14:38:50.540' as datetime)
출력: 2017-10-11 14:38:50.540
소규모 데이터 시간
select Cast('2017-10-11 14:38:50.540' as smalldatetime)
출력 : 2017-10-11 14:39:00
이 방법은 전체 분으로 반올림됩니다(초와 밀리초가 손실됩니다).
날짜/시간 간격띄우기
select Cast('2017-10-11 14:38:50.540' as datetimeoffset)
출력: 2017-10-11 14:38:50.5400000 +00:00
Datetime2
select Cast('2017-10-11 14:38:50.540' as datetime2)
출력: 2017-10-11 14:38:50.5400000
이 특정 쿼리의 경우 다음 높은 초부터 시작하는 값을 요청할 수 있는데 각 행에 대해 값비싼 함수 호출을 하는 이유는 무엇입니까?
select *
from table
where date >= '2010-07-20 03:21:53'
'작은 날짜' 데이터 유형 사용
select convert(smalldatetime, getdate())
가져올 것입니다
2015-01-08 15:27:00
여러 가지 방법이 있습니다.
select 1 where datediff(second, '2010-07-20 03:21:52', '2010-07-20 03:21:52.577') >= 0
또는
select *
from table
where datediff(second, '2010-07-20 03:21:52', date) >= 0
함수 호출이 하나 줄었지만 날짜가 너무 멀면 최대 정수가 넘치지 않도록 주의해야 합니다.
저장 프로시저를 사용하여 특정 초("YYY-MM-DD HH:TT:SS" 형식의 매개 변수)에서 이벤트를 찾을 때 밀리초를 무시하도록 SQL Server 쿼리를 설정했습니다.
WHERE
...[Time_stamp] >= CAST(CONCAT(@YYYYMMDDHHTTSS,'.000') as DateTime) AND
...[Time_stamp] <= CAST(CONCAT(@YYYYMMDDHHTTSS,'.999') as DateTime)
몇 분과 몇 초를 무시하는 것과 비슷한 방법을 사용할 수도 있습니다.
이것 좀 드셔보세요.
select substring('12:20:19.8470000',1,(CHARINDEX('.','12:20:19.8470000',1)-1))
(No column name)
12:20:19
많이 늦었지만 며칠 전에도 같은 문제가 있었습니다.위의 솔루션 중 어떤 것도 작동하지 않거나 적합해 보이지 않았습니다.밀리초 단위의 타임스탬프가 필요했기 때문에 Date_Format을 사용하여 문자열로 변환한 다음 Str_To_Date:
STR_TO_DATE(DATE_FORMAT(your-timestamp-here, '%Y-%m-%d %H:%i:%s'),'%Y-%m-%d %H:%i:%s')
약간 지저분하지만 매력적으로 작동합니다.
이게 도움이 될지도..SELECT [Datetime] = CAST ('20120228' AS 소규모 날짜)
o/p: 2012-02-28 00:00
이 예를 검토합니다.
declare @now datetimeoffset = sysdatetimeoffset();
select @now;
-- 1
select convert(datetimeoffset(0), @now, 120);
-- 2
select convert(datetimeoffset, convert(varchar, @now, 120));
다음과 같은 출력을 생성합니다.
2021-07-30 09:21:37.7000000 +00:00
-- 1
2021-07-30 09:21:38 +00:00
-- 2
2021-07-30 09:21:37.0000000 +00:00
(1)의 경우 결과는 반올림되고(이 경우 올림), (2)의 경우 결과는 잘립니다.
따라서 질문에 따라 날짜(시간) 유형 값을 밀리초 단위로 잘라내려면 다음을 사용해야 합니다.
declare @myDateTimeValue = <date-time-value>
select cast(convert(varchar, @myDateValue, 120) as <same-type-as-@myDateTimeValue>);
언급URL : https://stackoverflow.com/questions/3286849/sql-server-remove-milliseconds-from-datetime
'source' 카테고리의 다른 글
하위 쿼리 문제별 Oracle SQL 순서 지정! (0) | 2023.06.26 |
---|---|
ASP.NET에서 XML을 반환하는 방법은 무엇입니까? (0) | 2023.06.26 |
다른 데이터베이스에서 선택 설명 (0) | 2023.06.26 |
SQL*Plus에서 "2"는 무엇을 의미합니까? (0) | 2023.06.26 |
스프링 부팅이 시작될 때마다 ElasticSearch 상태 검사가 실패함 (0) | 2023.06.26 |