2013-03-08 5 views
10

मैं कॉलम को स्ट्रिंग में कनवर्ट करना चाहता हूं जहां कॉलम एक चुनिंदा स्टेटमेंट है और फिर किसी अन्य कॉलम के साथ मिलकर बनता है। यह वह जगह है जहां कनवर्ट या CAST का उपयोग करते समय मेरा भ्रम होता है।एसक्यूएल में स्ट्रिंग में कॉलम को कनवर्ट करें

उदाहरण:

SELECT employeeID 
    ,name 
    ,location 
    ,(SELECT COUNT(DISTINCT loginsFailed) 
    FROM users 
    WHERE (users.employeedID = userDetails.employeeID) 
     AND (users.startdate = 01-01-2013) as LoginCountFailed 
    ,(SELECT COUNT(DISTINCT logins) 
    FROM users 
    WHERE (users.employeedID = userDetails.employeeID) 
     AND (users.startdate = 01-01-2013) as LoginCount 
FROM userDetails 

अब, इस प्रश्न के सही काम करता है वह यह है कि में लॉग इन करने की सही संख्या प्रदान करता है और पूर्णांक के रूप में विफल रहा है। हालांकि, मैं इन पूर्णांक को स्ट्रिंग के रूप में उपयोग करना चाहता हूं ताकि मैं एक कॉलम कर सकूं। एक कारण है कि इसे स्ट्रिंग के रूप में एक कॉलम क्यों होना चाहिए।

मैं केवल 4 कॉलम रखना चाहता हूं, 5 नहीं। लॉगिन कॉलम जो मैं चाहता हूं वह लॉगिन हैउंटफेल/लॉगिनकाउंट। उदाहरण के लिए: 3/12। मैं एक स्ट्रिंग के रूप में यह जरूरत है, क्योंकि आप एक 0 से विभाजित नहीं कर सकते हैं और जहां हर CAST या CONVERT का उपयोग करके 0.

+1

अंतिम उत्पादन आप चाहते हैं क्या है क्या करेंगे? एक स्ट्रिंग जैसे '3/12''? या उस विभाजन का वास्तविक परिणाम, यानी '4'? क्या आप केवल एक त्रुटि को शून्य त्रुटि से विभाजित करने से बचाना चाहते हैं? –

उत्तर

10
MSSQL 2005 में संख्या concatanating आप कास्ट

CAST(loginsFailed AS VARCHAR(10)) + '/' + CAST(LoginCount AS VARCHAR(10)) 

loginsFailed का उपयोग करना चाहिए के लिए

और loginCount ऊपर वास्तव में है अपने select count distinct टुकड़े

मुझे आशा है कि यह काम करता है

CAST ((SELECT COUNT(DISTINCT loginsFailed) FROM users WHERE users.employeedID = userDetails.employeeID AND users.startdate = 01-01-2013) AS VARCHAR(10)) 
+ '/' + 
CAST ((SELECT COUNT(DISTINCT logins) FROM users WHERE users.employeedID = userDetails.employeeID AND users.startdate = 01-01-2013) AS VARCHAR(10)) 
+0

हां, मुझे कास्ट का उपयोग करना पता है। हालांकि, उप चयन का उपयोग करते समय मुझे वाक्यविन्यास सही नहीं मिल सकता है। – user1188241

+0

मैंने एक नमूना –

+1

जोड़ा है यह काम करता है। मैं देख सकता हूं कि मैं कहां गलती कर रहा था।मैं वहां उपनाम के साथ उप-चयन स्टेटमेंट गलत कास्टिंग कर रहा था। यह मेरे लिए भ्रमित हिस्सा था। – user1188241

2
DECLARE @i int 
SET @i=98235 

--Method 1 : Use CAST function 
SELECT CAST(@i as varchar(10)) 

--Method 2 : Use CONVERT function 
SELECT CONVERT(varchar(10),@i) 

--Method 3 : Use STR function 
SELECT LTRIM(STR(@i,10)) 

Source

+0

मैं कॉलम चुनते समय CONVERT और CAST के साथ familar हूं, हालांकि मुझे नहीं पता कि कैसे एक उप-चयन कथन को कनवर्ट या CAST करना है और फिर दो को सम्मिलित करें। – user1188241

1

आप निम्न कार्य कर सकते हैं कई बार:

CONVERT(VARCHAR(20), YourIntColumn) 

या

CAST(YourIntColumn AS VARCHAR(20)) 
2

तुम क्या चाहते करने के लिए एक मामले बयान शून्य तर्क के आधार पर विभाजन को संभालने के लिए है, संख्यात्मक डेटा के लिए एक स्ट्रिंग में परिवर्तन नहीं।

SELECT employeeID 
    ,name 
    ,location 
    ,(SELECT CASE WHEN COUNT(DISTINCT logins) = 0 then 0 ELSE 
COUNT(DISTINCT loginsFailed)/COUNT(DISTINCT logins) 
END 
    FROM users 
    WHERE (users.employeedID = userDetails.employeeID) 
     AND (users.startdate = 01-01-2013)) as LoginFailRatio 
FROM userDetails 
+0

ऐसा लगता है कि यह लॉगिन करेगा अगर लॉगिन और loginsfailed डेटाबेस कॉलम। मेरे उदाहरण का उपयोग करके यह कैसे काम करेगा यह उप-चयनों से बने अलियाड कॉलम नाम हैं? – user1188241

+0

ये मान अभी भी उप-चयन का उपयोग कर बनाए गए हैं। यह सिर्फ COUNTs() को एक उप-चयन में जोड़ता है और फिर विभाजन को कुछ लॉग इन करने पर सशर्त रूप से करता है। क्या तुमने इसे चलाया? –

0

मुझे लगता है कि आप यहां एक बाहरी क्वेरी बना सकते हैं:

SELECT u.employeeID, u.name, u.location, 
     CONVERT(varchar(10), u.LoginCountFailed) + '/' + CONVERT(varchar(10), u.LoginCount) "Ratio" 
    FROM 
     (
     SELECT employeeID 
      ,name 
      ,location 
      ,(SELECT COUNT(DISTINCT loginsFailed) 
      FROM users 
      WHERE (users.employeedID = userDetails.employeeID) 
       AND (users.startdate = 01-01-2013) as LoginCountFailed 
      ,(SELECT COUNT(DISTINCT logins) 
      FROM users 
      WHERE (users.employeedID = userDetails.employeeID) 
       AND (users.startdate = 01-01-2013) as LoginCount 
     FROM userDetails 
     ) u 
+0

यह काम नहीं किया – user1188241

+0

@ user1188241 - इसके बारे में क्षमा करें। क्या आप अभी कोशिश कर सकते हैं (मैंने इसे थोड़ा सा बदल दिया है) और सही त्रुटि पोस्ट करें (यदि इसमें अभी भी समस्याएं हैं)? –

0

मुझे लगता है कि इस चाल

Select column1 + '/' + column2 from table1 
संबंधित मुद्दे