SQL'de zaman olmadan tarih nasıl seçilir


257

SQL'de tarih seçtiğimde, olarak döndürülür 2011-02-25 21:17:33.933. Ama sadece Tarih bölümüne ihtiyacım var 2011-02-25. Bunu nasıl yapabilirim?


4
Sanırım bir dize istiyor ve bu nedenle çoğaltılamaz
bernd_k


@TylerH 2011-02-25 00: 00: 00.000'i şimdiki zaman yerine almanın bir yolu var mı?
Thrainder

Yanıtlar:


148

Sanırım bir ip istiyor.

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

120 burada giriş tarihini geçmesi olduğunu dönüştürme işlevini anlatır aşağıdaki biçimde : yyyy-mm-dd hh:mi:ss.


120 ne için?
Павле

@ Павле bu makaleye bakın Tarih ve Saat stilleri
Fox Vĩnh Tâm

Bu seçim dönüştürme (varchar (10), APPROVED_DATE, 120) kullanılır, ben hata sütun APPROVED_DATE datetime var, nasıl dönüştürmek? hata "LAB_RESULTS.APPROVED_DATE" çok parçalı tanımlayıcısı bağlanamadı.
Abdullah

531

SQL Server 2008 için:

Convert(date, getdate())  

Lütfen https://docs.microsoft.com/tr-tr/sql/t-sql/functions/getdate-transact-sql adresine bakın.


6
"Tür tarihi tanımlı bir sistem türü değil."
SeaDrive

10
DATE2008 yılında yeni
Tim SCHMELTER

33
bunun neden bu kadar güncel bir cevap olduğu hakkında hiçbir fikrim yok bu soru 2008 değil , SQL Server 2005 içindir . 2005 dateveri türüne sahip değildir, bu nedenle bu çözümü geçersiz kılar.
Joshua Burns

84
Bu değerlendirildi çünkü insanlar yazarlarına değil sorunlarına çözüm arıyorlar. Bu yüzden 110 kişi bu işe yaradıysa, 110 upvotes olması adil olduğunu düşünüyorum.
James

Select convert (table.order_date, getdate ()) kullandığımda aynı hata var; sql server sürüm 2017, hata (Tür tarihi tanımlı bir sistem türü değildir) sütun türü datetime
Abdullah

57

En hızlısı datediff, ör.

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

Ancak yalnızca değeri kullanmanız gerekiyorsa, dateadd'i atlayabilirsiniz, örn.

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

Burada ifade datediff(d, 0, getdate()), günün tarihini zaman bölümü olmadan döndürmek için yeterlidir.


Oldie ama goodie, bu numarayı eski 2000/2005 DB'lerde düzinelerce kez kullandı.
KeithS

43

Benim için işe yarayan CAST (GETDATE ()) tarihini kullanın, basit.


sütun adımı nereye ekleyeceğim? cast (getdate () işlevini tarih, sipariş_tarihi olarak) seç
Abdullah

AbdullahCAST(order_date AS DATE)
Andrew Morton


12

böyle kullanabilirsiniz

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

sütun adı sipariş tarihimi nereye koyacağım?
Abdullah

10

İçin 2008 eski sürümü :

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


bunun için alkışlar! Diğer çözümler sadece değeri kısaltan varchar (10) parçasına dayanır.
Gonza Oviedo

2

Biraz geç oldu, ancak ODBC "curdate" işlevini kullanın (köşeli parantez 'fn' ODBC işlevi kaçış dizisidir).

SELECT {fn curdate()} 

Çıktı: 2013-02-01


4
Cevabınızın kabul edilen cevaptan daha iyi olduğunu düşündüğünüzü dürüstçe merak ediyorum. Ya da belki de diğer cevaplara atıfta bulunuyorsunuz?
Mikael Eriksson

1
@Mikael Eriksson: Hmm, çünkü ODBC-İşlevleri kanonik işlevler ve bu nedenle belirleyici olmayan SQL-Sunucu işlevlerinin aksine dizinlenebilir. Ama boşver, testteki 3 girişinizden üretimdeki 1 * 10E6 girişlerine geçtiğinizde sadece bir ölçeklendirme sorunu, geliştirme sırasında sorun yaşamayacaksınız;)
Stefan Steiger

8
Bu sorguyu çalıştırırsanız SELECT {fn curdate()} FROM (SELECT 1) AS T(X)ve gerçek yürütme planına (xml sürümü) bir göz atarsanız, gerçekte yürütülen şeyin olduğunu görürsünüz CONVERT(varchar(10),getdate(),23). Bu ODBC fonksiyonunun veri türüdür Yani varchar(10)bir ile karşılaştırmak istiyorsanız o hangi vasıta datetimesen bir örtük dönüştürme alacak varchar(10)için datetimebir ipe yyyy-mm-dd. Örtük dönüşüm başarısız olur set dateformat dmy.
Mikael Eriksson

1
@Mikael Eriksson: Bir hata gibi görünüyor, bunun yerine SELECT CONVERT (char (8), GETDATE (), 112) kullanıyor olmalılar.
Stefan Steiger

"kanonik işlevleri ve bu nedenle dizinsiz, belirleyici olmayan SQL-Server işlevlerinin aksine" - er, ne?
Martin Smith


2

Gerekirse aynı veri zamanını korumak için tarihe dönüştürdükten sonra tekrar tarih saatine dönüştürün

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

2

Sıfır olmak için zamana ihtiyacınız varsa 2018-01-17 00:00:00.000:

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


Teşekkürler, aradığım şey buydu.
Pratik Ghag

1

Kullanımı basit:

convert(date, Btch_Time)

Aşağıdaki örnek:

Tablo:

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

Çok geç ama takip etmek benim için iyi çalıştı

declare @vCurrentDate date=getutcdate()

select @vCurrentDate

Veri türü tarih olduğunda saatler kısaltılır


0

PLSQL'de şunları kullanabilirsiniz:

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

bunu bir yoruma aktarmayı düşünebilirsiniz.
Ocak14 xlembouras

Bu soru SQL Server hakkında ... Oracle değil
Ben

0

Önce tarihi kayan ROUNDsayıya dönüştürün (sayısal değeri görüntüler), ardından sayısal değeri 0 ondalık basamağa dönüştürün, sonra da tarihi datime dönüştürün.

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

0

Tarih türünü yalnızca tarih kullanımı olarak döndürmek istiyorsanız

CONVERT(date, SYSDATETIME())

veya

SELECT CONVERT(date,SYSDATETIME()) 

veya

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.