Math.Round는 반올림 함수이다.
반올림 하려는 자릿수가 5인 경우 보통 올림이 된다고 생각하는데 Math.Round는 그렇지 않다.
예) Math.Round(3.125, 2) --> 예상값 : 3.13 이라고 생각하지만 실제 결과값 : 3.12
예) Math.Round(3.135, 2) --> 예상값 : 3.14, 결과값 : 3.14
그 이유인즉, Round 함수는 통계학 함수이다.
Round 함수는 반올림되는 수 바로 앞의 값이 짝수인 경우 버림이 되고, 반올림 되는 자릿 수의 값이 홀수인 경우 올림이 된다.
이렇게 함으로써 확률적으로 실제 평균값에 가깝도록 만드는 것이다.
이런 방식을 금융권에서도 쓰고 있다. 이러한 방식을 Banker's Rounding 방식이라고 한다.
닷넷의 Round 함수를 이용할때 MidpointRounding.AwayFromZero 파라미터의 여부에 따라 다른 값을 가질 수 있다.
* Math.Round(3.125, 2, MidpointRounding.AwayFromZero) --> 결과값 : 3.13
* Banker's Rounding 방식 : Math.Round(3.125, 2) --> 결과값 : 3.12
자바스크립트에서 substring 은 문자열을 끊을때 시작점과 끝점을 설정하여 그 안에 포함된 문자열을 가져온다.
주의해야 할것은 시작점과 끝점은 인덱스라 하여 0번 부터 시작이다.
예를 들어
ABCDEF 라는 문자열이 있을때
순서 A가 1번 부터가 아닌 0번 부터 시작 되는것이다.
ABCD 문자열을 뽑고 싶다면 변수.substring(0,3) 이렇게 하면 된다.
0번 인덱스는 A 를 가르키고 3번 인덱스는 D를 가르킨다.
고로 시작점에서 끝점까지 문자열을 가져오므로 ABCD 가 된다.
substr 은 substring 과 같이 문자열의 인덱스를 사용하는데 다른 점은 시작점에서 부터 몇개의 문자열을 가져올때 사용한다.
같은 예로 ABCDEF 를 substr(0,3)을 하면 0번 인덱스 A 에서 3개의 문자를 가져오므로 ABC가 된다.
실제예)
var string ="ABCDEF";
var ex1 = string.substring(0,3); ===>ABCD
아래 생성한 컬럼을 테이블 정의서 만들때 사용한다.
해당 내역을 조회해 오는 쿼리
프로시저로 생성해서 사용해도 된다.
SELECT DISTINCT A.ORDINAL_POSITION AS SEQ
, A.TABLE_CATALOG AS DB
, A.TABLE_SCHEMA AS USERID
, A.TABLE_NAME AS T_NM
, '' AS T_KOR_NM
, A.COLUMN_NAME AS C_NM
, (SELECT [Description] = ex.value
FROM sys.columns c
LEFT OUTER JOIN sys.extended_properties ex ON (ex.major_id = c.object_id
AND ex.minor_id = c.column_id
AND ex.name = 'MS_Description')
WHERE OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0
AND OBJECT_NAME(c.object_id) = A.TABLE_NAME
AND c.name = A.COLUMN_NAME) AS C_NM_KR --> 2005이후 컬러명 조회 추후 테이블 깔끔하게 정리필요.
, A.DATA_TYPE + CASE A.DATA_TYPE
WHEN 'varchar' THEN ' ('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'
WHEN 'int' THEN ' ('+LTRIM(STR(numeric_precision))+')'
WHEN 'numeric' THEN ' ('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'
WHEN 'decimal' THEN ' ('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'
WHEN 'datetime' THEN ''
WHEN 'image' THEN ''
WHEN 'char' THEN ' ('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'
END AS TYPE
, '' AS '사용여부'
, ISNULL((SELECT 'PK'
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE COLUMN_NAME = A.COLUMN_NAME
AND TABLE_NAME = A.TABLE_NAME
), '') AS C_KEY
, CASE A.IS_NULLABLE
WHEN 'NO' THEN 'NN'
WHEN 'YES' THEN ''
END AS NN
, ISNULL(A.COLUMN_DEFAULT, '') AS DFT
, ', ' + '@' + A.COLUMN_NAME + ' ' + A.DATA_TYPE + CASE A.DATA_TYPE WHEN 'varchar' THEN '('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'
WHEN 'int' THEN '('+LTRIM(STR(numeric_precision))+')'
WHEN 'numeric' THEN '('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'
WHEN 'decimal' THEN '('+LTRIM(STR(numeric_precision))+'.'+LTRIM(STR(NUMERIC_SCALE))+')'
WHEN 'datetime' THEN ''
WHEN 'image' THEN ''
WHEN 'char' THEN '('+LTRIM(STR(CHARACTER_MAXIMUM_LENGTH))+')'
END AS ARG
, ', ' + A.COLUMN_NAME AS C_NM2
, ', @' + A.COLUMN_NAME AS C_NM3
from information_schema.COLUMNS A , INFORMATION_SCHEMA.KEY_COLUMN_USAGE B
WHERE A.TABLE_NAME = '조회할테이블명'
AND A.TABLE_NAME = B.TABLE_NAME
ORDER BY A.ORDINAL_POSITION