2013-09-02 6 views
17

मेरे पास है जिसमें CREATED_TS नामक दिनांक कॉलम है जिसमें विभिन्न प्रारूपों में दिनांक हैं। नीचे के रूप मेंतिथि को प्रारूप में बदलने के लिए `mm/dd/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 

दिखाया अब मैं पहले की तरह मैं अपने SELECT क्वेरी की WHERE खंड में दिनांक की तुलना कर रहा हूँ प्रारूप mm\dd\yyyy करने के लिए इन परिवर्तित करना चाहते हैं।

मैं

CONVERT(VARCHAR(10),CREATED_TS,101) 

उपयोग करने की कोशिश, लेकिन जैसा कि,

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 

मैं जैसे के रूप में परिणाम की जरूरत परिणाम मिला। तुलना करने के लिए 02/20/2012

किसी भी मदद की सराहना की जाएगी।

+4

आपकी समस्या इसलिए है क्योंकि आप तारीखों को वर्चर्स के रूप में संग्रहीत कर रहे हैं! ऐसा करने का कोई अच्छा कारण नहीं है। तारीखों के रूप में स्टोर तारीखें! [कृपया इस आलेख को एक पठन दें] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx) – GarethD

+0

@GarethD उन्हें वास्तव में उन्हें डेटाटाइम –

उत्तर

31

पहले से ही varchar में अपने डेटा के रूप में, आप की तारीख में यह पहली कन्वर्ट करने के लिए है:

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

यह पहली तारीख में कनवर्ट करने के संबंध में सही है, लेकिन '111'' yyyy/mm/dd' के लिए है, ओपी के पास पहले से ही सही शैली है (101)। – GarethD

+0

को आपके सुझाव का उपयोग करके आवश्यक आउटपुट मिला लेकिन जिस तारीख को मैं इस प्रारूप से तुलना करना चाहता था उसे बदलने के लिए आवश्यक था .. – Rohaan

+0

कन्वर्ट (वर्कर (10), , 111)। लेकिन, ईमानदारी से, आपकी तारीखों को संग्रहीत करने और तुलना करने के बारे में सोचने के लायक है 0 तारीखों के रूप में –

21

101 की Value विनिर्देशक, अपने डेटा कास्टिंग, जबकि साथ उपयोग CONVERTdate रहे हैं:

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

@ डैरेन डेविस को शक्तिशाली डेजेफ़ से सीखना चाहिए;) – mattytommo

+0

111 'yyyy/mm/dd' के लिए है, ओपी की सही शैली है (101) समस्या यह है कि कॉलम पहले से ही एक वर्चर है और एक तारीख नहीं, इसलिए शैली लागू नहीं की जा रही है। – GarethD

+0

@GarethD अच्छा चिल्लाओ, अद्यतन। – mattytommo

5

क्या आप इस तरह कुछ ढूंढ रहे हैं?

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 

आउटपुट:

 
| 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 डेमो

0

उपयोग है:

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

या

select format(cast(CREATED_TS as date), 'MM/dd/yyyy') -- MySQL 3.23 and above 
संबंधित मुद्दे