/ / MySQL सेट डेटा प्रकार जब एएस अभिव्यक्ति का उपयोग किया जाता है [बंद] - mysql, प्रकार, कास्टिंग

जब एएस अभिव्यक्ति का उपयोग किया जाता है तो MySQL सेट डेटा प्रकार [बंद] - mysql, प्रकार, कास्टिंग

मुझे एक फ़ील्ड में डेटा प्रकार सेट करने की आवश्यकता है लेकिन मैं इसे पूरा नहीं कर सकता:

SELECT fname,lname,tname,games,
IFNULL((ib+iib+iiib+hr),0) AS h int (6), [does"t work]
IFNULL((a+b+c)),0.000) AS ops decimal (6,3) [does"t work]
FROM players,stats,teams
WHERE players.playerID = stats.sid AND players.club=teams.tid
ORDER BY obp DESC

उत्तर:

उत्तर № 1 के लिए 1

पहले से मूल्य अंकित करें:

SELECT fname, lname, tname, games,
CAST(COALESCE(ib+iib+iiib+hr, 0) as signed) AS h,
CAST(COALESCE(a+b+c, 0.000)  as decimal(6, 3)) AS ops
FROM players p JOIN
stats s
ON p.playerID = s.sid JOIN
teams t
ON p.club = t.tid
ORDER BY obp DESC;

मुझे नहीं लगता कि पूर्णांकों के लिए लंबाई के मापदंडों की अनुमति है cast()/convert().

टिप्पणियाँ:

  • कभी नहीँ में अल्पविराम का प्रयोग करें FROM खंड। हमेशा स्पष्ट उपयोग करें JOIN वाक्य - विन्यास।
  • तालिका उपनाम और योग्य स्तंभ नामों का उपयोग करें, हमेशा जब आपकी क्वेरी एक से अधिक तालिका को संदर्भित करती है।
  • मैं पसंद करता हूं COALESCE() सेवा मेरे IFNULL() इसलिये COALESCE() मानक एसक्यूएल है।
  • मुझे इसमें शामिल होने की स्थिति पर अत्यधिक संदेह है: p.playerID = s.sid.

जवाब के लिए 0 № 2

नमस्ते, यह मेरी टीम के साथी के बेसबॉल आंकड़ों को प्रशासित करने के लिए सिर्फ एक आसान MySQL कनेक्शन है।

SELECT fname,lname,tname,games,
CAST(coalesce(ib+iib+iiib+hr,0) as signed) AS h,r,
CAST(coalesce(ib+iib+iiib+hr+so+fc+o,0) as signed) AS
ab1,iib,iiib,hr,rbi,bb,
CAST(coalesce((ib*1)+(iib*2)+(iiib*3)+(hr*4),0) as signed) AS tb1,so,sb,
CAST(coalesce(((ib+iib+iiib+hr)+bb+hp)/(((ib+iib+iiib+hr)+so+fc+o)+bb+sf+hp)
,0.000) as decimal(6,3)) AS obp,
CAST(coalesce(((ib*1)+(iib*2)+(iiib*3)+
(hr*4))/((ib+iib+iiib+hr)+so+fc+o),0.000) as decimal(6,3)) AS slg,
CAST(coalesce((ib+iib+iiib+hr)/(((ib+iib+iiib+hr)+so+fc+o)),0.000) as
decimal(6,3)) AS avg,
CAST(coalesce((((ib+iib+iiib+hr)+bb+hp)/(((ib+iib+iiib+hr)+so+fc+o)
+bb+sf+hp))+(((ib*1)+(iib*2)+(iiib*3)+
(hr*4))/((ib+iib+iiib+hr)+so+fc+o)),0.000) as decimal(6,3)) AS ops
FROM players p JOIN
stats s
ON p.playerID = s.sid JOIN
teams t
ON p.club=t.tid
ORDER BY obp DESC

बिल्कुल वही, जिसकी मुझे तलाश थी!


जवाब के लिए 0 № 3

आप उपयोग कर सकते हैं COALESCE फ़ंक्शन MySQL है।

उदाहरण:

SELECT COALESCE(null, 0)

तो आपकी क्वेरी (मानने वाले कॉलम नाम में सही मान हो सकते हैं कि किसी भी डेटा टाइप को टाइपकास्ट करने के लिए नहीं) नीचे की तरह देख सकते हैं।

SELECT COALESCE ((ib+iib+iiib+hr),0) AS h,  COALESCE ((a+b+c),0.000) AS ops
FROM players,stats,teams WHERE players.playerID = stats.sid
AND players.club=teams.tid ORDER BY obp DESC;

बस यह प्रयास करें, डेटा के अभाव में मैंने आपको केवल एक नमूना क्वेरी प्रदान की है।