Berdasarkan pilih, saya dapat mengembalikan x baris seperti ini:
1 2019-07-23 10:14:04.000
1 2019-07-23 10:14:11.000
2 2019-07-23 10:45:32.000
1 2019-07-23 10:45:33.000
Kami memiliki semua milidetik dengan 0.
Apakah ada cara untuk menambahkan 1 oleh 1 milidetik, sehingga pilih akan terlihat seperti ini:
1 2019-07-23 10:14:04.001
1 2019-07-23 10:14:11.002
2 2019-07-23 10:45:32.003
1 2019-07-23 10:45:33.004
Saya mencoba membuat kursor atau bahkan pembaruan tanpa hasil.
Ini permintaan untuk mendapatkan hasil yang saya inginkan:
select top 10 ModifiedOn
from [SCHEMA].[dbo].[TABLE]
where FIELD between '2019-07-23 00:00' and '2019-07-23 23:59'
Ada nilai 81k. Lapangan adalah DATETIME
.
sql-server
sql-server-2008
datetime
varchar
SQL pembalap
sumber
sumber
Jawaban:
Datetime
tidak tepat ke level 1 milidetik. Apa yang Anda minta tidak mungkin kecuali Anda mengubah ke tipe data yang berbeda (yaitudatetime2
).Dokumentasi
Kutipan penting:
sumber
The
DateAdd
Fungsi adalah apa yang Anda cari.Gunakan
millisecond
sebagai parameter pertama pada fungsi, untuk memberi tahu Anda menambahkan milidetik. Kemudian gunakan1
sebagai parameter kedua, untuk menambahkan jumlah milidetik.Berikut ini sebuah contoh, mengambil waktu saat ini menjadi variabel, dan kemudian menambahkan satu milidetik ke dalamnya dan menyimpan hasilnya sebagai variabel kedua, dan kemudian mencetak setiap variabel
Hasil:
catatan:
Seperti yang ditunjukkan Forrest dalam jawaban lain,
datetime
tipe data tidak menjamin ketepatan milidetik. Itu membulatkan ke peningkatan .000, .003, atau .007 detik. Jika Anda ingin presisi milidetik, gunakandatetime2
.sumber
@ Doug-Deden memiliki titik awal yang tepat, tetapi saya hanya ingin mencoba menjawab apa yang saya pikir adalah maksud asli dari pertanyaan - bagaimana menerapkannya pada hasil yang ditetapkan dengan peningkatan milidetik per baris.
Dalam hal ini, Anda dapat menggunakan ROW_NUMBER dan Common Table Expression (edit sesuai kebutuhan untuk struktur tabel Anda, termasuk gabungan, dll.).
Pilih untuk menunjukkan nilai:
Pembaruan bergabung kembali ke tabel asli:
sumber
Table1
. Lakukan sajaUPDATE CTE SET my_date_column =...
Saya telah melakukannya menggunakan
DATETIME2(3)
.Seperti yang Anda lihat pada kueri di bawah ini, lebih dari itu
economic
:Perbedaan antara
datetime
dandatetime2
dijelaskan dengan baik di sini .Untuk latihan ini saya membuat tabel temp untuk tujuan pengujian, dan mengisinya dengan 999 berbeda
random dates
dari01-jan-2019
dan hari ini (23-july-2019
)dan kemudian, saya mengatur milidetik dari 1 hingga 999
dan inilah yang saya dapatkan: (tampilan sebagian)
sumber
Salah satu poster lainnya benar;
DATETIME
(dalam T-SQL) tidak akurat hingga milidetik (akurat ke centisecond).Untuk tingkat keakuratan itu, Anda ingin menggunakannya
DATETIME2
.Berikut adalah contoh dari mengkonversi string
datetime
kedatetime2
, kemudian menambahkan 1 milidetik, dan terakhir, mengkonversi kembali ke string.sumber
varchar
tanpa panjang .