10진수 문자열 및 Money 값 형식 지정(SQLSRV 드라이버)

PHP 드라이버 다운로드

정확도를 유지하기 위해 decimal 또는 numeric 형식은 항상 정확한 전체 자릿수 및 소수 자릿수가 포함된 문자열로 페치됩니다. 값이 1보다 작은 경우 앞에 오는 0이 누락됩니다. Money 및 smallmoney 필드도 마찬가지입니다. 이들 필드는 고정 소수 자릿수가 4인 10진수 필드이기 때문입니다.

누락된 경우 앞에 오는 0 추가

버전 5.6.0부터 사용자가 10진수 문자열의 서식을 지정할 수 있는 sqlsrv 연결 및 문 수준에 FormatDecimals 옵션이 추가됩니다. 이 옵션에는 부울 값(true 또는 false)이 필요하며 가져온 결과의 소수 또는 숫자 값의 형식에만 영향을 줍니다. 즉, FormatDecimals 옵션은 삽입 또는 업데이트와 같은 다른 작업에는 영향을 주지 않습니다.

기본적으로 FormatDecimalsfalse입니다. true로 설정하면 1보다 작은 10진수 값에 대해 선행 0이 10진수 문자열에 추가됩니다.

소수 자릿수 구성

FormatDecimals를 활성화한 상태에서 또 다른 옵션인 DecimalPlaces를 사용하면 Money와 smallmoney 데이터를 표시할 때 소수점 이하 자릿수를 구성할 수 있습니다. 이 값은 [0, 4] 범위의 정수 값을 허용하고, 표시될 때 반올림이 발생할 수 있습니다. 그러나 기본 Money 데이터는 동일하게 유지됩니다.

두 옵션 모두 연결 또는 문 수준으로 설정할 수 있으며, 문 설정은 항상 해당 연결 설정을 재정의합니다. DecimalPlaces 옵션은 Money 데이터에만 영향을 미치며, FormatDecimals가 적용되려면 DecimalPlaces를 true로 설정해야 합니다. 그렇지 않으면 DecimalPlaces 설정에 관계없이 서식이 해제됩니다.

참고 항목

Money 또는 smallmoney 필드의 크기는 4이므로 DecimalPlaces 값을 음수 또는 4보다 큰 값으로 설정하면 무시됩니다. 형식이 지정된 Money 데이터는 계산에 대한 입력으로 사용하지 않는 것이 좋습니다.

예시 - 간단한 가져오기

다음 예는 간단한 가져오기에서 새 옵션을 사용하는 방법을 보여줍니다.

<?php
$username = 'myusername';
$password = 'mypasword';
$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);
?>

예시 - 출력 매개 변수 형식 지정

10진수 또는 숫자 필드가 출력 매개 변수로 반환되는 경우 반환된 값은 일반 varchar 문자열로 간주됩니다. 그러나 SQLSRV_SQLTYPE_DECIMAL 또는 SQLSRV_SQLTYPE_NUMERIC이 지정된 경우 FormatDecimals를 true로 설정하여 숫자 문자열 값에 앞에 오는 0이 누락되지 않도록 할 수 있습니다. 자세한 내용은 방법: SQLSRV 드라이버를 사용하여 출력 매개 변수 검색을 참조하세요.

다음 예시에서는 decimal(8,4) 값을 반환하는 저장 프로시저의 출력 매개 변수 형식을 지정하는 방법을 보여줍니다.

$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
}

참고 항목

10진수 문자열 및 Money 값 형식 지정(PDO_SQLSRV 드라이버)

데이터 검색