10진수 문자열 및 Money 값 형식 지정(PDO_SQLSRV 드라이버)
정확도를 유지하기 위해 decimal 또는 numeric 형식은 항상 정확한 전체 자릿수 및 소수 자릿수가 포함된 문자열로 페치됩니다. 값이 1보다 작은 경우 앞에 오는 0이 누락됩니다. Money 및 smallmoney 필드도 마찬가지입니다. 이들 필드는 고정 소수 자릿수가 4인 10진수 필드이기 때문입니다.
누락된 경우 앞에 오는 0 추가
버전 5.6.0부터 사용자가 연결 또는 문 특성 PDO::SQLSRV_ATTR_FORMAT_DECIMALS
에서 10진수 문자열의 서식을 지정할 수 있습니다. 이 특성은 부울 값(true 또는 false)을 예상하며 가져온 결과에서 소수 또는 숫자 값의 형식에만 영향을 줍니다. 즉, 이 특성은 삽입 또는 업데이트와 같은 다른 작업에는 영향을 주지 않습니다.
기본적으로 PDO::SQLSRV_ATTR_FORMAT_DECIMALS
는 false입니다. true로 설정하면 1보다 작은 10진수 값에 대해 선행 0이 10진수 문자열에 추가됩니다.
소수 자릿수 구성
사용자는 PDO::SQLSRV_ATTR_FORMAT_DECIMALS
가 활성화된 상태에서 다른 연결 또는 문 특성인 PDO::SQLSRV_ATTR_DECIMAL_PLACES
를 통해 Money와 smallmoney 데이터를 표시할 때 소수점 이하 자릿수를 구성할 수 있습니다. 이 값은 [0, 4] 범위의 정수 값을 허용하고, 표시될 때 반올림이 발생할 수 있습니다. 그러나 기본 Money 데이터는 동일하게 유지됩니다.
문 특성은 항상 해당하는 연결 설정을 재정의합니다. PDO::SQLSRV_ATTR_DECIMAL_PLACES
옵션은 Money 데이터에만 영향을 미치며, PDO::SQLSRV_ATTR_FORMAT_DECIMALS
는 true로 설정해야 합니다. 그렇지 않으면 PDO::SQLSRV_ATTR_DECIMAL_PLACES
설정에 관계없이 서식이 해제됩니다.
참고 항목
Money 또는 smallmoney 필드의 스케일은 4이므로 PDO::SQLSRV_ATTR_DECIMAL_PLACES
를 음수 또는 4보다 큰 값으로 설정하면 무시됩니다. 형식이 지정된 Money 데이터는 계산에 대한 입력으로 사용하지 않는 것이 좋습니다.
연결 특성을 설정하려면
연결 지점에 특성을 설정합니다.
$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);
연결 후 특성 설정:
$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);
예시 - Money 데이터 형식 지정
다음 예시에서는 PDOStatement::bindColumn을 사용하여 Money 데이터를 가져오는 방법을 보여줍니다.
<?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);
?>
예시 - 연결 특성 재정의
다음 예시에서는 연결 특성을 재정의하는 방법을 보여줍니다.
<?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);
?>