Anda bisa menambahkan keduanya.
- jika yang
Time part
anda Date
kolom selalu nol
- dan yang
Date part
anda Time
kolom juga selalu nol (tanggal dasar: 1 Januari 1900)
Menambahkannya mengembalikan hasil yang benar.
SELECT Combined = MyDate + MyTime FROM MyTable
Rationale (pujian untuk ErikE / dnolan)
Ini berfungsi seperti ini karena cara tanggal disimpan sebagai dua 4-byte Integers
dengan 4-byte
kiri menjadi date
dan 4-byte kanan adalah time
. Ini seperti melakukan$0001 0000 + $0000 0001 =
$0001 0001
Edit tentang tipe SQL Server 2008 baru
Date
dan Time
merupakan tipe yang diperkenalkan di SQL Server 2008
. Jika Anda bersikeras menambahkan, Anda dapat menggunakanCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 tentang kehilangan presisi di SQL Server 2008 dan lebih tinggi (pujian untuk Martin Smith)
Lihat Bagaimana cara menggabungkan tanggal dan waktu ke datetime2 di SQL Server? untuk mencegah hilangnya presisi menggunakan SQL Server 2008 dan lebih tinggi.
Letnan Keersmaekers
sumber
1900-01-01
, bukan?float
. Di mana di bumi Anda belajar ini? Mereka disimpan sebagai bilangan bulat : bagian tanggal adalah jumlah hari sejak tanggal jangkar, dan bagian waktu adalah jumlah "kutu" sejak tengah malam, kutu didefinisikan sebagai 1/300 s untukdatetime
dan lebih tepat untuktime
dandatetime2
.Jika elemen waktu kolom tanggal Anda dan elemen tanggal kolom waktu Anda sama-sama nol, maka jawaban Lieven adalah yang Anda butuhkan. Jika Anda tidak dapat menjamin bahwa itu akan selalu menjadi masalah, maka itu menjadi sedikit lebih rumit:
sumber
The data types datetime and time are incompatible in the add operator.
Ini adalah solusi alternatif tanpa konversi karakter:
Anda hanya akan mendapatkan akurasi milidetik dengan cara ini, tetapi itu biasanya tidak masalah. Saya telah menguji ini di SQL Server 2008.
sumber
Ini berhasil untuk saya
(pada SQL 2008 R2)
sumber
Jika Anda tidak menggunakan SQL Server 2008 (yaitu Anda hanya memiliki tipe data DateTime), Anda dapat menggunakan TSQL berikut ini (memang kasar dan siap) untuk mencapai apa yang Anda inginkan:
Ini kasar dan siap, tetapi berhasil!
sumber
Jika kedua bidang Anda adalah datetime maka cukup menambahkannya akan berhasil.
misalnya:
Jika Anda menggunakan tipe data Tanggal & Waktu maka cukup masukkan waktu ke datetime
misalnya:
sumber
Ubah tanggal pertama yang disimpan dalam bidang datetime menjadi string, lalu konversikan waktu yang disimpan dalam bidang datetime menjadi string, tambahkan keduanya dan konversi kembali ke bidang datetime semua menggunakan format konversi yang diketahui.
sumber
Saya memiliki banyak kesalahan seperti yang dinyatakan di atas sehingga saya melakukannya seperti ini
Ini berhasil untuk saya.
sumber
Konversikan kedua bidang menjadi DATETIME:
dan jika Anda menggunakan
Getdate()
gunakan ini dulu:sumber
Cetakan:
sumber
Bekerja seperti pesona
sumber
SELECT CAST (CAST (@DateField As Date) Sebagai DateTime) + CAST (CAST (@TimeField As Time) Sebagai DateTime)
sumber
Cara lain adalah menggunakan
CONCAT
danCAST
, perlu diketahui, bahwa Anda perlu menggunakannyaDATETIME2(x)
untuk membuatnya bekerja. Anda dapat mengaturx
apa saja di antara yang0-7
7
berarti tidak ada kehilangan presisi.Kembali
2018-03-12 07:00:00.0000000
Diuji pada SQL Server 14
sumber
Untuk menggabungkan tanggal dari kolom datetime dan waktu dari kolom datetime lain, ini adalah solusi tercepat untuk Anda:
sumber
Saya mengalami situasi yang sama di mana saya harus menggabungkan bidang Tanggal dan Waktu ke bidang DateTime. Tak satu pun dari solusi yang disebutkan di atas bekerja, khususnya menambahkan dua bidang sebagai tipe data untuk penambahan 2 bidang ini tidak sama.
Saya membuat solusi di bawah ini, di mana saya menambahkan bagian jam dan kemudian menit ke tanggal. Ini bekerja dengan baik untuk saya. Silakan periksa dan beri tahu saya jika Anda mengalami masalah.
; dengan tbl sebagai (pilih StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 7/24/2019 12:00:00 AM ') pilih DATEADD (MI, DATEPART (MENIT, CAST (tbl .StatusTime SEBAGAI WAKTU)), DATEADD (HH, DATEPART (JAM, CAST (tbl.StatusTime SEBAGAI WAKTU)), CAST (tbl.StatusDate as DATETIME))) dari tbl
Hasil: 2019-07-24 17: 17: 00.000
sumber