Cara memilih tanggal tanpa waktu dalam SQL


257

Ketika saya memilih tanggal dalam SQL itu dikembalikan sebagai 2011-02-25 21:17:33.933. Tetapi saya hanya perlu bagian Date, yaitu 2011-02-25. Bagaimana saya bisa melakukan ini?


4
Saya kira dia ingin sebuah string, dan karena itu tidak ada duplikat
bernd_k


@ TylerH ada cara untuk mendapatkan 2011-02-25 00: 00: 00.000 bukan waktu saat ini?
Thrainder

Jawaban:


148

Saya kira dia ingin string.

select convert(varchar(10), '2011-02-25 21:17:33.933', 120)

120 disini menceritakan mengkonversi fungsi yang kita melewati tanggal masukan dalam format berikut : yyyy-mm-dd hh:mi:ss.


Untuk apa 120?
Павле

@ Павле merujuk artikel ini Tanggal dan Waktu gaya
Fox Vĩnh Tâm

saya menggunakan convert pilih ini (varchar (10), APPROVED_DATE, 120), saya mendapat kolom kesalahan APPROVED_DATE datetime, bagaimana saya akan mengubahnya? kesalahan Pengidentifikasi multi-bagian "LAB_RESULTS.APPROVED_DATE" tidak dapat diikat.
Abdullah

530

Untuk SQL Server 2008:

Convert(date, getdate())  

Silakan merujuk ke https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql


6
Saya mendapatkan "Tipe tanggal bukan tipe sistem yang ditentukan."
SeaDrive

10
DATEbaru pada tahun 2008.
Tim Schmelter

33
Saya tidak tahu mengapa ini adalah jawaban yang dijunjung tinggi. pertanyaan ini untuk SQL Server 2005, BUKAN 2008. 2005 tidak memiliki tipe datedata karena itu menganggap solusi ini tidak valid.
Joshua Burns

84
Itu dipilih karena orang datang mencari solusi untuk masalah mereka, bukan penulis. Jadi, jika 110 orang menemukan ini bekerja untuk mereka, saya pikir adil jika memiliki 110 upvotes.
James

Saya memiliki kesalahan yang sama ketika saya menggunakan pilih convert (table.order_date, getdate ()); sql server versi 2017, kesalahan (Tipe tanggal bukan tipe sistem yang ditentukan) tipe kolom datetime
Abdullah

57

Yang tercepat adalah datediff, mis

select dateadd(d, datediff(d,0, [datecolumn]), 0), other..
from tbl

Tetapi jika Anda hanya perlu menggunakan nilainya, maka Anda dapat melewatkan dateadd, mis

select ...
WHERE somedate <= datediff(d, 0, getdate())

di mana ekspresi datediff(d, 0, getdate())cukup untuk mengembalikan tanggal hari ini tanpa porsi waktu.


Oldie but goodie, menggunakan trik ini puluhan kali dalam DB 2000/2005 yang lebih tua.
KeithS

43

Gunakan CAST (GETDATE () sebagai tanggal) yang bekerja untuk saya, sederhana.


di mana saya akan menambahkan nama kolom saya? pilih pemeran (getdate () sebagai tanggal, order_date)?
Abdullah

@AbdullahCAST(order_date AS DATE)
Andrew Morton


12

Anda bisa menggunakan seperti ini

SELECT Convert(varchar(10), GETDATE(),120) 

di mana saya akan meletakkan tanggal pemesanan nama kolom saya?
Abdullah

10

Untuk versi 2008 yang lebih lama :

SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)


tepuk tangan untuk ini! Solusi lain hanya bergantung pada bagian varchar (10), yang hanya memotong nilainya.
Gonza Oviedo

2

Agak terlambat, tetapi gunakan fungsi ODBC "curdate" (angle brack 'fn' adalah urutan fungsi escape ODBC).

SELECT {fn curdate()} 

Keluaran: 2013-02-01


4
Sejujurnya saya ingin tahu bagaimana menurut Anda jawaban Anda lebih baik daripada jawaban yang diterima. Atau di mana Anda mungkin merujuk ke jawaban lain?
Mikael Eriksson

1
@Mikael Eriksson: Hmm, karena ODBC-Functions adalah fungsi kanonik dan karenanya dapat diindeks, tidak seperti fungsi SQL-Server nondeterministic. Tapi tidak apa-apa, ini hanya masalah penskalaan saat Anda beralih dari 3 entri Anda dalam pengujian ke entri 1 * 10E6 dalam produksi, Anda tidak mendapatkan masalah selama pengembangan;)
Stefan Steiger

8
Jika Anda menjalankan kueri ini SELECT {fn curdate()} FROM (SELECT 1) AS T(X)dan melihat pada rencana eksekusi aktual (versi xml), Anda akan melihat bahwa apa yang sebenarnya dieksekusi adalah CONVERT(varchar(10),getdate(),23). Jadi tipe data dari fungsi ODBC ini adalah varchar(10)yang berarti bahwa jika Anda ingin membandingkan hasilnya dengan datetimeAnda, Anda akan mendapatkan konversi implisit dari varchar(10)menjadi datetimepada sebuah string yyyy-mm-dd. Konversi tersirat itu akan gagal set dateformat dmy.
Mikael Eriksson

1
@Mikael Eriksson: Sepertinya bug, mereka seharusnya menggunakan SELECT CONVERT (char (8), GETDATE (), 112) sebagai gantinya.
Stefan Steiger

"Fungsi kanonik dan karenanya dapat diindeks, tidak seperti fungsi SQL-Server nondeterministic" - eh, apa?
Martin Smith

2

Anda dapat mencoba yang ini juga.

SELECT CONVERT(DATE, GETDATE(), 120)

2

Konversikan kembali ke datetime setelah mengonversi ke tanggal untuk menjaga datatime yang sama jika diperlukan

select Convert(datetime, Convert(date, getdate())  )

2

Jika Anda membutuhkan waktu untuk menjadi nol seperti 2018-01-17 00:00:00.000:

SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 121)


Terima kasih, ini yang saya cari.
Pratik Ghag

1

Gunakan sederhana:

convert(date, Btch_Time)

Contoh di bawah ini:

Meja:

Efft_d       Loan_I  Loan_Purp_Type_C   Orig_LTV    Curr_LTV    Schd_LTV    Un_drwn_Bal_a      Btch_Time            Strm_I  Btch_Ins_I
2014-05-31  200312500   HL03             NULL         1.0000    1.0000         1.0000      2014-06-17 11:10:57.330  1005    24851e0a-53983699-14b4-69109


Select * from helios.dbo.CBA_SRD_Loan where Loan_I in ('200312500') and convert(date, Btch_Time) = '2014-06-17'

1

Sudah terlambat tetapi mengikuti bekerja untuk saya dengan baik

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Ketika tipe data adalah tanggal, jam akan terpotong


0

Di PLSQL Anda bisa menggunakan

to_char(SYSDATE,'dd/mm/yyyy')

pertimbangkan untuk mentransfer ini ke komentar.
xlembouras

Pertanyaan ini tentang SQL Server ... bukan Oracle
Ben

0

Pertama-tama Konversikan tanggal menjadi mengambang (yang menampilkan angka), lalu ROUNDangka menjadi 0 angka desimal, lalu konversikan ke datetime.

convert(datetime,round(convert(float,orderdate,101),0) ,101)

0

Jika Anda ingin mengembalikan jenis tanggal hanya sebagai tanggal gunakan

CONVERT(date, SYSDATETIME())

atau

SELECT CONVERT(date,SYSDATETIME()) 

atau

DECLARE @DateOnly Datetime
SET @DateOnly=CONVERT(date,SYSDATETIME())

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.