2012-10-17 17 views
5

'da geçerli bir tarih atlamayın SQL Server'da bir veritabanım var. Herhangi bir tabloyu değiştirmek için yetkim yok, ancak görünümler oluşturabilirim.Varchar'ı datetime'ye nasıl dönüştürebilirim ve TSQ

YYYYMMDD biçiminde tarihleri ​​depolayan üç varchar sütunum var. Tarihlerin varchar'dan datetime'a dönüştürüldüğü bir görünüm oluşturmak istiyorum.

Şimdi, bu sütunlarda bir tarih yerine boş alan, NULL veya - karakterinin olması durumu olabilir.

closedDate sütununu ele alalım. Ben CONVERT(datetime, closedDate, 112)

  1. Geçerli tarihler -

  2. ,

  3. tarih 1900-01-01 dönüştürülür boş alan olduğundan

    ,

  4. BOŞ tutulur, doğru dönüştürülür kullanırsanız bir dönüştürme hatasına neden olur:

Geçerli bir tarih formu varsa ve NULL veya tüm diğer durumlarda boş bir tarihi (veya alanı) bıraktıysa, tarihleri ​​dönüştürmek için işleve nasıl diyebilirim?

cevap

15

bu

CASE WHEN ISDATE(closedDate) = 1 THEN CONVERT(datetime, closedDate, 112) 
    ELSE NULL END closedDate 
+0

Mükemmel teşekkür deneyin! Ve eğer NULL yerine boş tarih/yer almak istiyorum? – CiccioMiami

+0

Tarih-saat alanında boş alan olamaz. – HLGEM

+0

Teşekkürler bir çekicilik gibi çalışır! –

0
 Use below code  


    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
         ELSE null END 
      FROM tablename 


use below for empty data 

    SELECT CASE WHEN ISDATE(datecolumn)=1 THEN CONVERT(datetime, datecolumn, 103) 
          ELSE '' END 
       FROM tablename 
+0

İkinci örnek beklendiği gibi çalışmayacak. SQL (TSQL PL/SQL) satır çıktısı için bir veri türü seçmelidir - ve sütun datetime olduğu için - tüm değerler datetime olarak dönüştürülmelidir. Ve SQL Server'da datetime '' datetime '' dönüşü '' 1900-01-01 00:00:00 '' (ve Oracle'da da aynısını yapacağım) boş bir dize. – ripvlan

+0

evet, varsayılan tarihe dönüş 1900-01-01 00: 00: 00.000 – Shridhar

İlgili konular