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?

Neeraj
sumber
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.

bernd_k
sumber
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

Prad9
sumber
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.

RichardTheKiwi
sumber
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.

Anna-leny
sumber
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) 
A. Goutam
sumber
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)

Domcha
sumber
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

Stefan Steiger
sumber
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)
Ram Pratap
sumber
2

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

select Convert(datetime, Convert(date, getdate())  )
RollRoll
sumber
2

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

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

Simon Alphonse
sumber
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'
Arvind Kumar
sumber
1

Sudah terlambat tetapi mengikuti bekerja untuk saya dengan baik

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Ketika tipe data adalah tanggal, jam akan terpotong

Naveed Yousaf
sumber
0

Di PLSQL Anda bisa menggunakan

to_char(SYSDATE,'dd/mm/yyyy')
Morterox
sumber
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)
pengguna4162468
sumber
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())
TMP ByKIS
sumber
0

Coba ini.

SELECT DATEADD(DD, 0, DATEDIFF(DD, 0, GETDATE()))
Ram Pratap
sumber