Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aby se zachovala přesnost, desetinné nebo číselné typy se vždy načítají jako řetězce s přesnými přesnostmi a měřítky. Pokud je jakákoli hodnota menší než 1, chybí úvodní nula. Je to stejné s poli typu peníze a malými penězi, protože jsou to desetinná místa s pevnou škálou rovnající se 4.
Přidejte počáteční nuly, pokud chybí
Počínaje verzí 5.6.0 se možnost FormatDecimals přidá do úrovní připojení a příkazů sqlsrv, což uživateli umožňuje formátovat desetinné řetězce. Tato možnost očekává logickou hodnotu (pravda nebo nepravda) a má vliv pouze na formátování desetinných nebo číselných hodnot v načtených výsledcích. Jinými slovy, tato FormatDecimals možnost nemá žádný vliv na jiné operace, jako je vložení nebo aktualizace.
Ve výchozím nastavení FormatDecimals je false. Pokud je nastavena hodnota na pravda, budou přidány počáteční nuly k desetinným řetězcům pro jakoukoliv desetinnou hodnotu menší než 1.
Konfigurace počtu desetinných míst
Když FormatDecimals je zapnutá, další možnost, DecimalPlacesumožňuje uživatelům konfigurovat počet desetinných míst při zobrazování peněz a malých dat. Přijímá celočíselné hodnoty v rozsahu [0, 4] a zaokrouhlování může nastat, když se zobrazí. Nicméně, základní data týkající se peněz zůstávají nezměněna.
Obě možnosti lze nastavit na úrovni připojení nebo příkazu a nastavení příkazu vždy předčí odpovídající nastavení připojení. Všimněte si, že DecimalPlaces možnost ovlivňuje pouze peněžní data a FormatDecimals musí být nastaveno na true, aby DecimalPlaces vstoupilo v platnost. Jinak je formátování vypnuté nezávisle na nastavení DecimalPlaces.
Poznámka:
Vzhledem k tomu, že pole money nebo smallmoney mají měřítko 4, bude nastavení DecimalPlaces hodnoty na libovolné záporné číslo nebo jakákoli hodnota větší než 4 ignorována. Nedoporučuje se používat žádná formátovaná data peněz jako vstupy do jakéhokoli výpočtu.
Příklad – jednoduché načtení
Následující příklad ukazuje, jak používat nové možnosti v jednoduchém dotazu.
<?php
$username = 'myusername';
$password = '<password>';
$tableName = 'mytable';
$connectionInfo = array("UID" => $username, "PWD" => $password, "Database" => "myDB", "FormatDecimals" => true);
$server = "myServer"; // IP address also works
$conn = sqlsrv_connect( $server, $connectionInfo);
$numDigits = 2;
$query = "SELECT money1 FROM $tableName";
$options = array("DecimalPlaces" => $numDigits);
$stmt = sqlsrv_prepare($conn, $query, array(), $options);
sqlsrv_execute($stmt);
if (sqlsrv_fetch($stmt)) {
$field = sqlsrv_get_field($stmt, 0);
echo $field; // expect a numeric value string with 2 decimal places
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>
Příklad – formátování výstupního parametru
Pokud se jako výstupní parametr vrátí desetinné nebo číselné pole, bude vrácená hodnota považována za běžný řetězec varchar. Pokud je však zadána hodnota SQLSRV_SQLTYPE_DECIMAL nebo SQLSRV_SQLTYPE_NUMERIC, můžete nastavit FormatDecimals na true, abyste zajistili, že číselné hodnotě řetězce nebude chybět úvodní nula. Další informace najdete v tématu Postupy: Načtení výstupních parametrů pomocí ovladače SQLSRV.
Následující příklad ukazuje, jak formátovat výstupní parametr uložené procedury, která vrací desetinnou(8;4) hodnotu.
$outString = '';
$outSql = '{CALL myStoredProc(?)}';
$stmt = sqlsrv_prepare($conn,
$outSql,
array(array(&$outString, SQLSRV_PARAM_OUT, null, SQLSRV_SQLTYPE_DECIMAL(8, 4))),
array('FormatDecimals' => true));
if (sqlsrv_execute($stmt)) {
echo $outString; // expect a numeric value string with no missing leading zero
}
Viz také
Formátování desetinných řetězců a hodnot peněz (ovladač PDO_SQLSRV)