Mengonversi bidang tanggal varchar ke jenis data waktu tanggal [duplikat]
Saya membuat kesalahan dengan menggunakan varchar untuk menyimpan data saya yang mewakili tanggal / waktu. Sekarang saya mencoba mengonversi kolom data teks saya, disimpan sebagai varchar, seperti:
2020-11-25T14:22:41.3539327Z
Ke dalam kolom yang menyimpan tipe data datetime.
Jawaban
Asalkan semua data Anda dalam format yyyy-MM-ddThh:mm:ss.nnnnnnn
maka Anda tinggal mengubah tipe data kolom:
ALTER TABLE dbo.YourTABLE ALTER COLUMN YourColumn datetime2(7);
Jika Anda membutuhkan zona waktu di sana, gunakan datetimeoffset(7)
saja.
-- to fix it you can use convert, below uses GetDate for examaple
SELECT convert(varchar, getdate(), 120)
tergantung pada presisi apa yang Anda butuhkan, Anda dapat menggunakan tautan di bawah ini untuk menemukannya dan mengubah 120 menjadi angka berapa pun yang Anda butuhkan untuk presisi tersebut.
https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/
Untuk memperbaiki tabel Anda, Anda harus mengikuti langkah-langkah berikut:
- Tambahkan kolom baru ke tabel Anda untuk DateTime
- Jalankan pembaruan di tabel Anda menggunakan Konversi di atas untuk memperbarui kolom baru dengan nilai yang dikonversi dari bidang varchar Anda.
- Kemudian jatuhkan kolom dengan data varchar.
Kode untuk melakukan langkah-langkah yang saya uraikan di atas
ALTER TABLE dbo.TableName ADD NewDateTimeCOL DATETIME
-- NOTE if your table is LARGE you will not want to do a direct update like this but do looping for performace purposes
UPDATE dbo.TableName
SET NewDateTimeCOL = convert(varchar, OldDateTimeCOL, 120)
ALTER TABLE dbo.TableName DROP COLUMN OldDateTimeCOL