답변:
두 개만 추가하면됩니다.
Time part
당신의 Date
열은 항상 0이다 Date part
당신의 Time
열은 항상 0입니다 (기본 날짜 : 1900 년 1 월 1 일)그것들을 추가하면 올바른 결과를 반환합니다.
SELECT Combined = MyDate + MyTime FROM MyTable
날짜가 2 개의 4 바이트
Integers
로 저장되는 방식으로 인해 왼쪽 4 바이트는date
이고 오른쪽 4 바이트는time
입니다. 그 것처럼$0001 0000 + $0000 0001 = $0001 0001
Date
에 Time
소개 된 유형입니다 SQL Server 2008
. 추가를 주장하면 사용할 수 있습니다.Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
SQL Server에서 날짜와 시간을 datetime2로 결합하는 방법을 살펴보십시오 . SQL Server 2008 이상을 사용하여 정밀도 손실을 방지합니다.
1900-01-01
입니까?
float
. 지구 어디에서 이것을 배웠습니까? 이들은 저장되는 정수 : 날짜 부가 앵커 일 이후 일 수 있으며, 시간 부분 자정 이후 "틱"의 수이다 대해 1/300들로 정의되는 틱 datetime
과 더 정밀 time
하고 datetime2
.
날짜 열의 시간 요소 와 시간 열의 날짜 요소가 모두 0이면 Lieven의 답변 이 필요합니다. 항상 그런 경우를 보장 할 수 없다면 약간 더 복잡해집니다.
SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) +
DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column)
FROM your_table
The data types datetime and time are incompatible in the add operator.
이것은 나를 위해 일했다
CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)
(SQL 2008 R2에서)
SQL Server 2008을 사용하지 않는 경우 (예 : DateTime 데이터 형식 만있는 경우) 다음 TSQL을 사용하여 원하는 것을 얻을 수 있습니다.
DECLARE @DateOnly AS datetime
DECLARE @TimeOnly AS datetime
SET @DateOnly = '07 aug 2009 00:00:00'
SET @TimeOnly = '01 jan 1899 10:11:23'
-- Gives Date Only.
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly))
-- Gives Time Only.
SELECT DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)
-- Concatenates Date and Time parts.
SELECT
CAST(
DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly)) + ' ' +
DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)
as datetime)
거칠고 준비되었지만 작동합니다!
두 필드가 모두 날짜 시간 인 경우 간단히 추가하면됩니다.
예 :
Declare @d datetime, @t datetime
set @d = '2009-03-12 00:00:00.000';
set @t = '1899-12-30 12:30:00.000';
select @d + @t
날짜 및 시간 데이터 유형을 사용한 경우 시간을 날짜 시간으로 캐스트하십시오.
예 :
Declare @d date, @t time
set @d = '2009-03-12';
set @t = '12:30:00.000';
select @d + cast(@t as datetime)
날짜 시간 필드에 저장된 첫 번째 날짜를 문자열로 변환 한 다음 날짜 시간 필드에 저장된 시간을 문자열로 변환하고 두 날짜를 추가 한 후 알려진 변환 형식을 사용하여 날짜 시간 필드로 다시 변환하십시오.
Convert(datetime, Convert(char(10), MYDATETIMEFIELD, 103) + ' ' + Convert(char(8), MYTIMEFIELD, 108), 103)
두 필드를 모두 DATETIME으로 변환하십시오.
SELECT CAST(@DateField as DATETIME) + CAST(@TimeField AS DATETIME)
그리고 Getdate()
이것을 사용한다면 이것을 먼저 사용하십시오 :
DECLARE @FechaActual DATETIME = CONVERT(DATE, GETDATE());
SELECT CAST(@FechaActual as DATETIME) + CAST(@HoraInicioTurno AS DATETIME)
DECLARE @Dates table ([Date] datetime);
DECLARE @Times table ([Time] datetime);
INSERT INTO @Dates VALUES('2009-03-12 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-26 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-30 00:00:00.000');
INSERT INTO @Times VALUES('1899-12-30 12:30:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');
WITH Dates (ID, [Date])
AS (
SELECT ROW_NUMBER() OVER (ORDER BY [Date]), [Date] FROM @Dates
), Times (ID, [Time])
AS (
SELECT ROW_NUMBER() OVER (ORDER BY [Time]), [Time] FROM @Times
)
SELECT Dates.[Date] + Times.[Time] FROM Dates
JOIN Times ON Times.ID = Dates.ID
인쇄물:
2009-03-12 10:00:00.000
2009-03-26 10:00:00.000
2009-03-30 12:30:00.000
SELECT CAST(your_date_column AS date) + CAST(your_time_column AS datetime) FROM your_table
매력처럼 작동
또 다른 방법은 사용하는 것입니다 CONCAT
그리고 CAST
당신이 사용해야하는 것을 알고, DATETIME2(x)
그것을 작동하게 할 수 있습니다. 정밀도 손실이 없음 x
을 0-7
7
의미하는 값 으로 설정할 수 있습니다 .
DECLARE @date date = '2018-03-12'
DECLARE @time time = '07:00:00.0000000'
SELECT CAST(CONCAT(@date, ' ', @time) AS DATETIME2(7))
보고 2018-03-12 07:00:00.0000000
SQL Server 14에서 테스트
날짜 시간 열의 날짜와 다른 날짜 시간 열의 시간을 결합하려면 이것이 가장 빠른 솔루션입니다.
select cast(cast(DateColumn as date) as datetime) + cast(TimeColumn as datetime) from YourTable
날짜 및 시간 필드를 DateTime 필드와 병합 해야하는 비슷한 상황이 발생했습니다. 위에서 언급 한 해결책 중 어느 것도 작동하지 않으며, 특히이 두 필드를 추가하기위한 데이터 유형으로 두 필드를 추가하는 것은 동일하지 않습니다.
아래 솔루션을 만들어서 날짜에 시간과 분을 추가했습니다. 이것은 나를 위해 아름답게 작동했습니다. 확인 후 문제가 발생하면 알려주십시오.
; tbl을 (StatusTime = '12 / 30 / 1899 5:17:00 PM ', StatusDate ='7/24/2019 12:00:00 AM '으로 선택) DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) tbl에서
결과 : 2019-07-24 17 : 17 : 00.000