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.