SQL Server tarih saatini daha kısa bir tarih biçimine dönüştürün


83

datetimeSQL Server'da bana bunun gibi veriler veren bir sütunum var 10/27/2010 12:57:49 pmve bu sütunu sorgulamak istiyorum, ancak SQL Server'ın gün ay ve yılı döndürmesini istiyorum - ör. 2010 10 27ya da böyle bir şey.

Araştırmam gereken işlevler nelerdir?

Başka bir tarih veri türüne dönüştürmeye çalışmalı mıyım? Veya basitçe bir dizgeye dönüştürür mü?


2
Bu makaleye bir göz atın: msdn.microsoft.com/en-us/library/ms187928.aspx Özellikle> Tarih ve Saat Stilleri
Brissles

6
SQL Server'ın hangi sürümü ? SQL Server 2008, tarih ve saatle ilgili bir dizi yeni veri türü getirdi, örneğin DATE- yani 2008'deyseniz, SELECT CAST(YourDateTimeColumn AS DATE)yalnızca tarihi kullanabilir ve yalnızca tarihi geri alabilirsiniz - saat bölümü yok.
marc_s


Yanıtlar:


123

Göz at CONVERT . 3. parametre, dönüştürmek istediğiniz tarih saat stilidir.

Örneğin

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) -- dd/MM/yyyy format

12
Görünüşe göre 106 "gg mon yy" ve "gg / AA / yyyy" 103
nahab

3
@nahab Doğru söylüyorsunuz. Ayrıca, yılın kısaltılmasını önlemek için varchar (10) yerine varchar (11) kullanmak zorunda kaldım (örneğin, 1953 yerine 195 gördüm)
Henrov

6
Ayrıca, sonuçların aa / gg / yyyy olarak biçimlendirilmesini istiyorsanız 101'i kullanabilirsiniz
iliketocode

58

Bunu dene:

print cast(getdate() as date )


5
Bu seçeneği kabul edilen cevaptan daha çok seviyorum. Sütunu bir Tarih biçiminde bırakır, böylece benim 'siparişe göre' sadece bir varchar yerine doğru çalışır.
Milne

2
Bu, SQL Server 2005 ve öncesinde çalışmaz. DATE veri türü SQL 2008 ile tanıtıldı.
JerryOL

Yukarıda belirtildiği gibi, bir tarih veri türü elde etmek gerçekten güzeldir, ancak belirli bir format beklendiğinde ("gg MM yyyy" gibi) daha fazlasına ihtiyaç vardır.
trincot

15

Sonuca bir tarih biçiminde ihtiyacınız varsa şunları kullanabilirsiniz:

Select Convert(DateTime, Convert(VarChar, GetDate(), 101))

10

CAST ve CONVERT'e ek olarak, Sql Server 2008 kullanıyorsanız, bir tarih türüne dönüştürebilir (veya başlamak için bu türü kullanabilirsiniz) ve ardından isteğe bağlı olarak tekrar bir varchar'a dönüştürebilirsiniz:

declare @myDate date
set @myDate = getdate()
print cast(@myDate as varchar(10))

çıktı:

2012-01-17

6

SQL Server 2005 ile şunu kullanırdım:

select replace(convert(char(10),getdate(),102),'.',' ')

Sonuçlar: 2015 03 05


5

2018-03-30 08: 43: 28.177 gibi sonuçları veren bir tarih saat alanınız varsa

Önerilen: ve değiştirmek istediğiniz datetime için tarih 2018-03-30 gibi görünmesini

cast(YourDateField as Date)

1
yeni bir şey eklemediniz, jabu.hlong bu cevabı zaten 4 yıl önce verdi ...
Pawel Czapski

Tarihin OP'nin formatında sunulacağı garanti edilmez. Yyyy-AA-gg, gg / AA / yyyy, gg / AA / yyyy 00:00:00 veya başka bir şey olabilir.
trincot

4

En kısa aa / gg / yy tarih formatı şu şekilde elde edilebilir:

Select Convert(varchar(8),getdate(),1)

0

Sadece tarih anahtar kelimesi ekleyin. Örneğin tarih (sipariş tarihi) seçin, sipariş tarihi> '2014-10-01' tarihe göre gruplandırılan siparişlerden (sipariş tarihi) sayın (1);

sipariş tarihi tarih saatindedir. Bu sorgu, datetime yerine o tarihe ait siparişleri gösterecektir.

Tarih saat sütununa uygulanan tarih anahtar kelimesi, onu kısa tarih olarak değiştirir.


0

SQL Server'ın herhangi bir sürümü için: dateadd (dd, tarihliiff (dd, 0, getdate ()), 0)


Tarihin OP'nin formatında sunulacağı garanti edilmez. Yyyy-AA-gg, gg / AA / yyyy, gg / AA / yyyy 00:00:00 veya başka bir şey olabilir.
trincot

0

Orijinal DateTime alanı: [_Date_Time]

Shortdate'e dönüştürülmüş: "Short_Date"

CONVERT(date, [_Date_Time]) AS 'Short_Date'

Bu, dize olarak işlenmek üzere arayüze bırakılacak bir tarih veri türü döndürür, bu nedenle "27/12/2018 00:00:00" üretebilir. OP'nin istediği bu değil.
trincot

Elde etmeyi amaçladığı şey bu - gg / AA / yyyy; ve cevabımın ortaya çıkardığı şey 2018-11-20
Yousef Albakoush

Öncelikle iyi 2018-11-20 ait olmayan / AA / yyyy ancak yyyy-AA-dd dd. Ancak işleme gerçekten sisteme (ve yerel ayara) bağlıdır. Benim sistemimde saat, dakika ve saniye de üretiyor (tümü sıfır). Bunun nedeni, SQL'e tarihin nasıl dize olarak temsil edilmesi gerektiğini söylememiş olmanız ve OP'nin tam bir dize biçimine ihtiyaç duymasıdır.
trincot

İlk olarak, 2018-11-20, bilgisayarımın Arapça dil kullanımı için yapılandırılmış olmasıdır; İkinci olarak, bilgisayarımdaki kısa tarihi değiştirdikten sonra deneyeceğim
Yousef Albakoush
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.