Вы можете просто добавить два.
- если
Time part
ваша Date
колонка всегда равен нулю
- и
Date part
вашей Time
колонки также всегда равен нулю (базовая дата: 1 января 1900)
Добавление их возвращает правильный результат.
SELECT Combined = MyDate + MyTime FROM MyTable
Обоснование (благодарность ErikE / dnolan)
Это работает так из-за того, что дата хранится в виде двух 4-байтовых символов,
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)
Edit2 относительно потери точности в SQL Server 2008 и более поздних версиях (слава Мартину Смиту)
Посмотрите, как объединить дату и время с datetime2 в SQL Server? предотвратить потерю точности при использовании SQL Server 2008 и выше.
Ливен Керсмакерс
источник
1900-01-01
, нет?float
. Где на земле вы узнали это? Они хранятся в виде целых чисел : часть даты - это количество дней с даты привязки, а часть времени - это число «тиков» с полуночи, тики которых определены как 1/300 сdatetime
и более точны дляtime
иdatetime2
.Если время элемент вашей даты столбца и дата элемент вашего времени столбца равны нулю , то ответ Ливена является то , что вам нужно. Если вы не можете гарантировать, что так будет всегда, это немного усложняется:
источник
The data types datetime and time are incompatible in the add operator.
Это альтернативное решение без каких-либо преобразований символов:
Вы получите точность только в миллисекундах, но это нормально. Я проверил это в SQL Server 2008.
источник
Это сработало для меня
(на SQL 2008 R2)
источник
Если вы не используете SQL Server 2008 (т. Е. У вас есть только тип данных DateTime), вы можете использовать следующий (по общему мнению, грубый и готовый) TSQL для достижения желаемого:
Это грубо и готово, но это работает!
источник
Если оба поля имеют дату и время, просто добавьте их.
например:
Если вы использовали тип данных Date & Time, просто приведите время к datetime
например:
источник
Преобразуйте первую дату, хранящуюся в поле даты и времени, в строку, затем преобразуйте время, хранящееся в поле даты и времени, в строку, добавьте две и преобразуйте обратно в поле даты и времени, используя все известные форматы преобразования.
источник
У меня было много ошибок, как указано выше, поэтому я сделал это так
Это сработало для меня.
источник
Преобразовать оба поля в DATETIME:
и если вы используете,
Getdate()
сначала используйте это:источник
Печать:
источник
Работает как шарм
источник
ВЫБЕРИТЕ CAST (CAST (@DateField As Date) в качестве DateTime) + CAST (CAST (@TimeField As Time) в качестве DateTime)
источник
Другим способом является использование
CONCAT
иCAST
, имейте в виду, что вам нужно использовать,DATETIME2(x)
чтобы заставить его работать. Вы можете установитьx
между0-7
7
значениями без потери точности.Возвращает
2018-03-12 07:00:00.0000000
Протестировано на SQL Server 14
источник
Чтобы объединить дату из столбца datetime и время из другого столбца datetime, это самое быстрое решение для вас:
источник
Я столкнулся с подобной ситуацией, когда мне пришлось объединить поля Date и Time с полем DateTime. Ни одно из вышеупомянутых решений не работает, особенно добавление двух полей, так как тип данных для добавления этих двух полей не совпадает.
Я создал решение ниже, где я добавил час, а затем минутную часть к дате. Это прекрасно сработало для меня. Пожалуйста, проверьте это и дайте мне знать, если у вас возникнут какие-либо вопросы.
; при значении tbl (выберите StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 24.07.2009 12:00:00 AM ') выберите DATEADD (MI, DATEPART (MINUTE, CAST (tbl) .StatusTime AS TIME)), DATEADD (ЧЧ, DATEPART (ЧАС, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) из таблицы tbl
Результат: 2019-07-24 17: 17: 00.000
источник