한 필드의 날짜를 다른 필드의 시간과 결합하는 방법 - MS SQL Server
에는 2개의 추출물이 .datetime컬럼을 클릭합니다.한 열은 날짜를 저장하고 다른 열은 시간을 저장합니다.
두를 타입의 요?datetime
날짜
2009-03-12 00:00:00.000
2009-03-26 00:00:00.000
2009-03-26 00:00:00.000
시대
1899-12-30 12:30:00.000
1899-12-30 10:00:00.000
1899-12-30 10:00:00.000
두 개를 더하기만 하면 됩니다.
- 만약
Time partDate은 항상 입니다. - 및 그
Date partTimecolumn도 항상 0입니다(기준일: 1900년 1월 1일).
이 값을 추가하면 올바른 결과가 반환됩니다.
SELECT Combined = MyDate + MyTime FROM MyTable
근거(ErikE/dnolan에 대한 칭찬)
가 2개의 되기 때문에 합니다.
Integers는 '4바이트'입니다.date는 '4바이트'입니다.time똑같다$0001 0000 + $0000 0001 = $0001 0001
새로운 SQL Server 2008 유형에 대한 편집
Date ★★★★★★★★★★★★★★★★★」Time입니다.SQL Server 2008가 있는 는, 「」를 사용할 수 있습니다.Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
SQL Server 2008 이상에서의 정밀도 손실에 관한 편집 2 (Martin Smith에 대한 칭찬)
SQL Server 2008 이후를 사용하여 정확도가 저하되지 않도록 하려면 SQL Server에서 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
이것은 문자 변환이 없는 대체 솔루션입니다.
DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))
이 방법으로는 밀리초 정도의 정확도밖에 얻을 수 없지만, 보통은 괜찮습니다.SQL Server 2008에서 테스트한 적이 있습니다.
이건 내게 효과가 있었다.
CAST(Tbl.date as DATETIME) + CAST(Tbl.TimeFrom AS TIME)
(SQL 2008 R2)
SQL Server 2008을 사용하지 않는 경우(즉, Date Time 데이터 유형만 있는 경우) 다음과 같은 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)
거칠고 준비돼있지만 효과가 있어!
두 필드가 모두 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)
이것은 시간 열의 날짜 값을 무시하는 나의 솔루션이었다.
CAST(Tbl.date as DATETIME) + CAST(CAST(Tbl.TimeFrom AS TIME) as DATETIME)
이것이 다른 사람들에게 도움이 되기를 바란다.
두 필드를 모두 DATETIME으로 변환합니다.
SELECT CAST(@DateField as DATETIME) + CAST(@TimeField AS DATETIME)
먼저 사용하시는 경우는 다음과 같습니다.
DECLARE @FechaActual DATETIME = CONVERT(DATE, GETDATE());
SELECT CAST(@FechaActual as DATETIME) + CAST(@HoraInicioTurno AS DATETIME)
datetime 필드에 저장된 첫 번째 날짜를 문자열로 변환한 다음 datetime 필드에 저장된 시간을 문자열로 변환하고 두 개를 추가한 후 모두 알려진 변환 형식을 사용하여 datetime 필드로 다시 변환합니다.
Convert(datetime, Convert(char(10), MYDATETIMEFIELD, 103) + ' ' + Convert(char(8), MYTIMEFIELD, 108), 103)
위와 같이 오류가 많아서 이렇게 했습니다.
try_parse(concat(convert(date,Arrival_date),' ',arrival_time) as datetime) AS ArrivalDateTime
그것은 나에게 효과가 있었다.
한 날짜에서 시간을 원하는 두 날짜와 다른 날짜에서 시간을 찾는 두 날짜에 대해 이 작업을 수행할 수 있습니다.
declare @Time as datetime = '2021-11-19 12:34'
declare @Date as datetime = '2021-10-10'
SELECT @time + datediff(day, @Time, @Date)
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(cast(DateColumn as date) as datetime) + cast(TimeColumn as datetime) from YourTable
SELECT CAST(@DateField As DateTime) + CAST(@TimeField As Time)
또 다른 방법은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(concat(Cast(DateField as varchar), ' ', Cast(TimeField as varchar)) as datetime) as DateWithTime from TableName;
select s.SalesID from SalesTbl s
where cast(cast(s.SaleDate as date) as datetime) + cast(cast(s.SaleCreatedDate as time) as datetime) between @FromDate and @ToDate
기존 답변은 다음 사항을 다루지 않습니다.datetime2데이터 입력이므로 내 데이터를 추가합니다.
다음과 같은 경우에 값을 추가하는 것을 전제로 합니다.
- 그
datetime2값은 0이 아닌 시간 구성요소 및/또는 소수 초를 포함할 수 있습니다. - 그
time값은 값을 포함할 수 있습니다.23:59:59.9999999즉, 86,3999.9999초, 86,3999,999,999.9마이크로초 또는 86,3999,999,900나노초입니다.
기능의 제한 때문에, 다음의 2개의 순서로 추가할 필요가 있습니다.
- 시간 값을 초로 변환하여 사용
dateadd(second, ...) - 시간 값에서 나노초를 추출하여 사용합니다.
dateadd(nanosecond, ...)위에서 계산한 날짜에 그것들을 더하다
declare @dv datetime2 = '2000-01-01 12:34:56.7890123';
declare @tv time = '23:59:59.9999999';
select dateadd(
nanosecond,
datepart(nanosecond, @tv),
dateadd(
second,
datepart(hour, @tv) * 60 * 60 + datepart(minute, @tv) * 60 + datepart(second, @tv),
@dv
)
);
-- 2000-01-02 12:34:56.7890122
§ 나노초 값이 데이터 타입에 맞지 않을 수 있습니다.dateadd함수가 예기하고 있다.
SELECT CAST(your_date_column AS date) + CAST(your_time_column AS datetime) FROM your_table
마법처럼 기능하다
Date 필드와 Time 필드를 Date Time 필드로 병합해야 하는 비슷한 상황이 발생하였습니다.위의 어느 솔루션도 동작하지 않습니다.특히 이들2개의 필드를 추가하는 데이터 타입으로서2개의 필드를 추가하는 것은 다릅니다.
아래의 솔루션을 작성했습니다.여기서 날짜에 시간과 분 부분을 추가했습니다.이것은 나에게 아주 잘 작동했다.확인하시고 무슨 문제가 생기면 알려주세요.
;tbl as ( StatusTime = '12/30/time 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).Status Time AS TIME), CAST(TBL).TBL로부터의 StatusDate as DATETIME)
결과 : 2019-07-24 17:00.000
언급URL : https://stackoverflow.com/questions/700619/how-to-combine-date-from-one-field-with-time-from-another-field-ms-sql-server
'source' 카테고리의 다른 글
| 다른 프로세스에서 사용 중인 파일 삭제 (0) | 2023.04.19 |
|---|---|
| 텍스트 파일에서 문자열 읽기 및 쓰기 (0) | 2023.04.19 |
| 'CELL TO THE LEFT'를 참조하기 위한 Excel 공식 (0) | 2023.04.19 |
| 문자열 값이 많은 문자열 목록(목록) 초기화 방법 (0) | 2023.04.19 |
| bash를 호출하고 새 셸 내에서 명령을 실행한 다음 사용자에게 제어권을 반환하려면 어떻게 해야 합니까? (0) | 2023.04.19 |