SORU
5 Kasım 2008, ÇARŞAMBA


T-SQL ile bir tarih oluşturmak

SQL Server 2005'te bir datetime içine 12, 1, 2007 gibi tek tek parçaları ile bir tarih dönüştürmek için çalışıyorum. Aşağıdaki denedim:

CAST(DATEPART(year, DATE) '-'  DATEPART(month, DATE)  '-'  DATEPART(day, DATE) AS DATETIME)

ama bu yanlış tarih olur. Ne uygun bir datetime biçimi içine üç tarihi değerleri açmak için doğru yoldur.

CEVAP
5 Kasım 2008, ÇARŞAMBA


Bunu deneyin:

Declare @DayOfMonth TinyInt Set @DayOfMonth = 13
Declare @Month TinyInt Set @Month = 6
Declare @Year Integer Set @Year = 2006
-- ------------------------------------
Select DateAdd(day, @DayOfMonth - 1, 
          DateAdd(month, @Month - 1, 
              DateAdd(Year, @Year-1900, 0)))

İyi çalışır, saf aritmetik işleme. çok hızlı ve herhangi bir tarih biçimi bağlı değil bu yüzden herhangi bir dize dönüşüm yaparken değil yararı vardır Bu büyük harfe çevirir aslında bu SQL Server'ın iç temsil datetime ve smalldatetime değerleri iki bölüm değeri ilk bölümü olan bir tamsayı temsil eden gün sayısı bu yana 1 Ocak 1900, ve ikinci bölümü bir ondalık kesir temsil eden kesir kısmı bir gün (zaman) --- Yani tam sayı değeri 0 (sıfır) her zaman çevirir doğrudan içine Gece yarısından sabah 1 Ocak 1900...

ya da, @teşekkürler öneri için gelen brinary,

Select DateAdd(yy, @Year-1900,  
       DateAdd(m,  @Month - 1, @DayOfMonth - 1)) 

Ekim 2014 Düzenlenebilir. @Cade Roux tarafından Belirtildiği gibi, SQL 2012 şimdi bir yerleşik işlevi vardır:
DATEFROMPARTS(year, month, day)
o aynı şeyi yapar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kamaniusilelis

    kamaniusilel

    10 HAZİRAN 2011
  • LimeFire

    LimeFire

    2 ŞUBAT 2012
  • PaulGBelliveau

    PaulGBellive

    5 Mart 2009