Android-kotlin中MySql查询到SQL房间查询的转换
我刚从后端得到下面的mysql查询。 我必须使用Android中的Room数据库在本地管理这些东西 因此,后端查询如下:Android-kotlin中MySql查询到SQL房间查询的转换,android,mysql,sql,sqlite,android-room,Android,Mysql,Sql,Sqlite,Android Room,我刚从后端得到下面的mysql查询。 我必须使用Android中的Room数据库在本地管理这些东西 因此,后端查询如下: Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber, ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, ROUND(AVG(IF(temp
Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber,
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime,
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature,
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge
from batteryDetails
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
"datetime(timeStamp ,'%d') AS dateNumber, " +
"ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
"ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
"ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
@Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
"strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
"round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
"ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
"ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
我已尝试按以下方式购买:
Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber,
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime,
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature,
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge
from batteryDetails
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
"datetime(timeStamp ,'%d') AS dateNumber, " +
"ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
"ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
"ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
@Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
"strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
"round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
"ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
"ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
@Query(“选择日期时间(时间戳,%d-%b”)作为日期,”+
datetime(时间戳“%d”)作为日期编号+
四舍五入(平均值(如果(充电状态为空,0,充电状态)),2)作为充电超时+
四舍五入(平均值(如果(温度为零,0,温度)),2)作为温度+
“四舍五入(平均值(如果(电流为零,0,电流)),2)作为平均电荷放电”+
“FROM”+DatabaseConstant.muserbatterydailstable+
“其中name=:batteryId和时间戳介于:startDate和:endDate之间”+
“按日期时间分组(时间戳,%Y-%m-%d')按时间戳排序”)
suspend fun getHistoryData(batteryId:String,startDate:String,endDate:String):列表?
但下面是一个错误:
错误:查询有问题:[SQLITE_error]SQL错误或
缺少数据库(没有这样的函数:if)
公共抽象java.lang.Object getHistoryData(@org.jetbrains.annotations.NotNull()
查询结果如下:
Select DATE_FORMAT(timeStamp ,'%d-%b') AS date, DATE_FORMAT(timeStamp ,'%d') AS dateNumber,
ROUND(AVG(IF(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime,
ROUND(AVG(IF(temperature IS NULL, 0, temperature)), 2) AS temperature,
ROUND(AVG(IF(current IS NULL, 0, current)), 2) AS averageChargeDischarge
from batteryDetails
where name="VERNE000003"
and timeStamp between "2021-03-11 11:40:29" AND "2021-03-12 23:40:29"
Group by DATE_FORMAT(timeStamp ,"%Y-%m-%d") ORDER BY timeStamp;
@Query("SELECT datetime(timeStamp ,'%d-%b') AS date, " +
"datetime(timeStamp ,'%d') AS dateNumber, " +
"ROUND(AVG(if(stateOfCharge IS NULL, 0, stateOfCharge)), 2) AS chargeOverTime, " +
"ROUND(AVG(if(temperature IS NULL, 0, temperature)), 2) AS temperature, " +
"ROUND(AVG(if(current IS NULL, 0, current)), 2) AS averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"GROUP BY datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
suspend fun getHistoryData(batteryId: String, startDate: String, endDate: String): List<BatteryDetails>?
@Query("Select strftime('%d %m',datetime(timeStamp, 'unixepoch')) as dates, " +
"strftime('%d', datetime(timeStamp, 'unixepoch')) as dateNumber, " +
"round(avg(coalesce( stateOfCharge,0))) as chargeOverTime, " +
"ROUND(AVG(coalesce( avgTemperature,0))) as avgTemperature, " +
"ROUND(AVG(coalesce(current,0))) as averageChargeDischarge " +
"FROM " + DatabaseConstant.mUserBatteryDetailsTable +
" WHERE name= :batteryId and timeStamp between :startDate AND :endDate " +
"Group by datetime(timeStamp ,'%Y-%m-%d') ORDER BY timeStamp")
用大小写替换IF()。@Akina谢谢mam,现在得到:“SQL错误或缺少数据库(近”)”:语法错误)“请。指南。
如果(A,B,C)
=>当A然后B其他C结束时的情况
。但是在您的情况下,IF(column为NULL,0,column)
可以替换为COALESCE(column,0)
。在任何数据库(Access除外)中,IF(stateOfCharge为NULL,0,stateOfCharge)
的等价物是COALESCE(stateOfCharge,0)