/ / MySQL ustawia typ danych, gdy używane jest wyrażenie AS [zamknięte] - mysql, typy, rzutowanie

Typ danych zestawu danych MySQL, gdy używane jest wyrażenie AS [closed] - mysql, types, casting

Muszę ustawić typ danych na pole, ale nie mogę tego zrobić:

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

Odpowiedzi:

1 dla odpowiedzi № 1

Rzuć wartość wcześniej:

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;

Nie sądzę, aby parametry długości dla liczb całkowitych były dozwolone w cast()/convert().

Uwagi:

  • Nigdy używaj przecinków w FROM klauzula. Zawsze użyj wyraźnego JOIN składnia.
  • Użyj aliasów tabel i kwalifikowanych nazw kolumn, zawsze gdy twoje zapytanie odnosi się do więcej niż jednej tabeli.
  • wolę COALESCE() do IFNULL() bo COALESCE() to standardowy SQL.
  • Jestem bardzo podejrzliwy wobec tego warunku dołączenia: p.playerID = s.sid.

0 dla odpowiedzi nr 2

Cześć, to tylko proste połączenie MySQL do administrowania statystykami baseballowymi moich kolegów z drużyny.

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

Idealnie dokładnie to, czego szukałem!


0 dla odpowiedzi № 3

Możesz użyć funkcji COALESCE to MySQL.

Przykład:

SELECT COALESCE(null, 0)

Twoje zapytanie (zakładając, że nazwa kolumny może mieć prawidłowe wartości, aby nie rzutować żadnego typu danych), może wyglądać jak poniżej.

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;

Po prostu spróbuj tego, w przypadku braku danych Właśnie dostarczyłem przykładowe zapytanie.