2013-09-02 24 views
17

Farklı formatlarda tarih tutan CREATED_TS tarih sütunu olan bir sql table yaşıyorum.nasıl biçimlendirileceği bir biçime dönüştürülür mm/gg/yyyy

Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Feb 20 2012 12:00AM 
11/29/12 8:20:53 PM   
Nov 16 2011 12:00AM 
Feb 20 2012 12:00AM 
11/29/12 8:20:52 PM 

aşağıda gösterildiği gibi Şimdi benim SELECT sorgunun WHERE maddesi tarihleri ​​kıyaslıyorum önce olduğu gibi biçimine mm\dd\yyyy bu dönüştürmek istiyorum.

Ben
CONVERT(VARCHAR(10),CREATED_TS,101) 

kullanarak denedim ama mesela olarak analiz mi

Feb 20 201 
11/29/12 
Feb 20 201 
11/29/12 
Feb 20 201 
11/29/12 
Nov 16 201 
Feb 20 201 
11/29/12 

olarak sonuç aldık. Karşılaştırmak için 02/20/2012.

Herhangi bir yardım için teşekkür ederiz.

+4

Sorununuz, tarihleri ​​varchar olarak depoladığınızdan kaynaklanıyor! Bunu yapmak için iyi bir sebep yok. Tarihleri ​​tarih olarak saklayın! [Lütfen bu makaleyi okuyunuz] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) – GarethD

+0

@GarethD Aslında onları datetime –

cevap

31

, önce tarih dönüştürmek zorunda:

select convert(varchar(10), cast(ts as date), 101) from <your table> 
+7

Bu, ilk önce tarihe dönüştürme ile ilgili olarak doğrudur, ancak '111', yyyy/aa/gg için, OP zaten doğru stile sahiptir (101). – GarethD

+0

öneri kullanarak gerekli çıkışı aldım ama bu formatta karşılaştırmak istediğim tarihi dönüştürmek için gerekli .. – Rohaan

+0

convert (varchar (10), , 111). Ama, dürüst olmak gerekirse, senin tarihlerini –

21

verilerinizi döküm iken 101 ait Value belirtici, kullan CONVERTdate için: zaten varchar verileriniz gibi

CONVERT(VARCHAR(10), CAST(Created_TS AS DATE), 101) 
+1

@DarrenDavies güçlü Dazefs'den öğrenmiş olmalı;) – mattytommo

+0

111 'yyyy/aa/dd' için, OP doğru stil var (101) problem zaten sütun zaten bir varchar ve bir tarih değil, bu yüzden stil uygulanmıyor. – GarethD

+0

@GarethD İyi not, güncellendi. – mattytommo

5

Böyle bir şey mi arıyorsunuz?

SELECT CASE WHEN LEFT(created_ts, 1) LIKE '[0-9]' 
      THEN CONVERT(VARCHAR(10), CONVERT(datetime, created_ts, 1), 101) 
      ELSE CONVERT(VARCHAR(10), CONVERT(datetime, created_ts, 109), 101) 
     END created_ts 
    FROM table1 

Çıktı: İşte

 
| CREATED_TS | 
|------------| 
| 02/20/2012 | 
| 11/29/2012 | 
| 02/20/2012 | 
| 11/29/2012 | 
| 02/20/2012 | 
| 11/29/2012 | 
| 11/16/2011 | 
| 02/20/2012 | 
| 11/29/2012 | 

SQLFiddle demo

0

Kullanım:

select convert(nvarchar(10), CREATED_TS, 101) 

veya

select format(cast(CREATED_TS as date), 'MM/dd/yyyy') -- MySQL 3.23 and above 
İlgili konular