Formatação de cadeias de caracteres decimais e valores monetários (driver PDO_SQLSRV)
Para preservar a precisão, tipos decimais ou numéricos são sempre buscados como cadeias de caracteres com precisão e escala exatas. Se qualquer valor for menor que 1, o zero à esquerda estará ausente. É o mesmo com campos money e smallmoney, pois são campos decimais com uma escala fixa igual a 4.
Adicionar zeros à esquerda se estiverem ausentes
Da versão 5.6.0 em diante, o atributo de conexão ou instrução PDO::SQLSRV_ATTR_FORMAT_DECIMALS
permite que o usuário formate cadeias de caracteres decimais. Esse atributo espera um valor booliano (true ou false) e afeta apenas a formatação de valores decimais ou numéricos nos resultados buscados. Em outras palavras, esse atributo não tem qualquer efeito sobre outras operações, como inserção ou atualização.
Por padrão, PDO::SQLSRV_ATTR_FORMAT_DECIMALS
é false. Se definido como true, os zeros à esquerda das cadeias de caracteres decimais serão adicionados para qualquer valor decimal menor que 1.
Configurar o número de casas decimais
Com PDO::SQLSRV_ATTR_FORMAT_DECIMALS
ativado, outro atributo de conexão ou instrução, PDO::SQLSRV_ATTR_DECIMAL_PLACES
, permite que os usuários configurem o número de casas decimais ao exibir dados do tipo money e smallmoney. Ele aceita valores inteiros no intervalo de [0, 4] e o arredondamento pode ocorrer quando mostrado. No entanto, os dados do tipo money subjacentes permanecem os mesmos.
Os atributos de instrução sempre substituem as configurações de conexão correspondentes. Observe que a opção PDO::SQLSRV_ATTR_DECIMAL_PLACES
afeta apenas os dados do tipo money e PDO::SQLSRV_ATTR_FORMAT_DECIMALS
deve ser definida como true. Caso contrário, a formatação será desativada, independentemente da configuração PDO::SQLSRV_ATTR_DECIMAL_PLACES
.
Observação
Como os campos money ou smallmoney têm escala 4, configurar PDO::SQLSRV_ATTR_DECIMAL_PLACES
como um número negativo ou maior que 4 será ignorado. Não é recomendável usar nenhum dado do tipo money formatado como entrada para cálculos.
Para definir os atributos de conexão
Definir atributos no ponto de conexão:
$attrs = array(PDO::SQLSRV_ATTR_FORMAT_DECIMALS => true, PDO::SQLSRV_ATTR_DECIMAL_PLACES => 2); $conn = new PDO("sqlsrv:Server = myServer; Database = myDB", $username, $password, $attrs);
Definir atributos após a conexão:
$conn = new PDO("sqlsrv:Server = myServer; Database = myDB", $username, $password); $conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true); $conn->setAttribute(PDO::SQLSRV_ATTR_DECIMAL_PLACES, 2);
Exemplo – formatar dados do tipo money
O seguinte exemplo mostra como buscar dados do tipo money usando PDOStatement::bindColumn:
<?php
$database = "myDB";
$server = "(local)";
$conn = new PDO( "sqlsrv:server=$server; Database = $database", "", "");
$conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true);
$numDigits = 3;
$query = "SELECT smallmoney1 FROM aTable";
$options = array(PDO::SQLSRV_ATTR_DECIMAL_PLACES => $numDigits);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn('smallmoney1', $field);
$result = $stmt->fetch(PDO::FETCH_BOUND);
echo $field; // expect a number string with 3 decimal places
unset($stmt);
unset($conn);
?>
Exemplo – substituir os atributos de conexão
O seguinte exemplo mostra como substituir os atributos de conexão:
<?php
$database = 'myDatabase';
$server = 'myServer';
$username = 'myuser';
$password = 'mypassword'
$conn = new PDO("sqlsrv:server=$server; Database = $database", $username, $password);
$conn->setAttribute(PDO::SQLSRV_ATTR_FORMAT_DECIMALS, true);
$conn->setAttribute(PDO::SQLSRV_ATTR_DECIMAL_PLACES, 2);
$query = 'SELECT smallmoney1 FROM testTable1';
$options = array(PDO::SQLSRV_ATTR_FORMAT_DECIMALS => false);
$stmt = $conn->prepare($query, $options);
$stmt->execute();
$stmt->bindColumn('smallmoney1', $field);
$result = $stmt->fetch(PDO::FETCH_BOUND);
echo $field; // expect a number string showing the original scale -- 4 decimal places
unset($stmt);
unset($conn);
?>
Consulte Também
Formatação de cadeias de caracteres decimais e valores monetários (driver SQLSRV)