我有一个SQL查询(针对MSSQL数据库),如下所示:
$sql_timekort = "SELECT
status,
timematrise.ansatt,
SUM(normaltimer) AS normaltimer,
SUM(overtid_1) AS overtid_1,
SUM(overtid_2) AS overtid_2,
SUM(kilometer) AS kilometer,
COUNT(diett) AS diett,
COUNT(CASE WHEN diett = 'ja' THEN 1 ELSE NULL END) AS diett
FROM timematrise
WHERE status = '6'
AND dato LIKE '2019-02%'
GROUP BY ansatt, status";
哪个由sqlsrv在PHP中运行,如下所示:
$stmt = sqlsrv_query($timeregistrering_tilkobling, $sql_timekort); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); }
此查询的结果在SQL Management Studio中如下所示:
此结果符合预期,并且SQL查询似乎正常。但是当我像这样执行sqlsrv_fetch_array时:
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
这是结果:
Array
(
[status] => 6
[ansatt] => 270
[normaltimer] => .00
[overtid_1] => .00
[overtid_2] => .00
[kilometer] => 0
[diett] => 0
)
这就是我感到困惑的地方。 数字在哪里?每个数字都是.00或0。
该表的定义如下:
status: int
ansatt: int
normaltimer: decimal(18, 2)
overtid_1: decimal(18, 2)
overtid_2: decimal(18, 2)
kilometer: decimal(18, 0)
diett: varchar(50)
感谢您的帮助!
答案 0 :(得分:1)
我无法重现您的错误,因为在Windows环境(用于SQL Server 4.0.3的PHP驱动程序,SQL Server 2012)中,decimal
列中的所有值均已正确返回。但这是Linux中的reported issue。报告的问题是:1)货币字段在点之后返回4位数字,并且2)小数部分在开始时不返回0。
从用于SQL Server的PHP驱动程序5.6版开始,您可以在两个驱动程序的连接和语句级别使用FormatDecimals选项,以格式化提取结果中的十进制值。因此,这将是显而易见的解决方案。