일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 재테크
- 술안주
- 토렌트
- 함수
- 카카오가 찾아준 헤어샵
- Google Map
- db
- 트레커
- 초대장
- .net
- 티스토리
- 하남맛집
- 카카오헤어샵
- 내장함수
- 트래커
- 동적쿼리
- MSsql
- jquery
- 파리바게트 청라 SK점
- 신장사거리
- 파리바게트
- 박근혜 탄핵
- 국정화
- 하남
- C#
- javascript
- 최신트래커
- Lock
- 맛집
- 국정화 반대
- Today
- Total
featur
[MSSQL] 자주쓰는 함수 본문
[MSSQL] 자주쓰는 함수
날짜 형식(스타일,포맷) 변환
날짜시간타입을 정수형으로 변환 DATEPART
SELECT
GETDATE() 'GETDATE'
, DATEPART(DW, GETDATE()) 'DW' -- 일요일이 1 (설정가능)
, DATEPART(DAYOFYEAR, GETDATE()) 'DAYOFYEAR'
, DATEPART(QUARTER, GETDATE()) 'QUARTER'
, DATEPART(YEAR, GETDATE()) 'YEAR'
, DATEPART(MONTH, GETDATE()) 'MONTH'
, DATEPART(DAY, GETDATE()) 'DAY'
, DATEPART(HOUR, GETDATE()) 'HOUR'
, DATEPART(MINUTE, GETDATE()) 'MINUTE'
, DATEPART(SECOND, GETDATE()) 'SECOND'
, DATEPART(MILLISECOND, GETDATE()) 'MILLISECOND'
, DATEPART(MICROSECOND, GETDATE()) 'MICROSECOND'
, DATEPART(NANOSECOND, GETDATE()) 'NANOSECOND'
두 날짜 사이의 차이 분단위로 구하기 - DATEDIFF
SELECT DATEDIFF(DAY, '2016-07-05', '2016-09-01')
이번달 마지막 날짜 구하기 (특정 일자의 월 마지막 날짜는 GETDATE()대신 특정 일자를 넣는다)
SELECT DATEADD(MONTH, DATEDIFF(MONTH, -1,GETDATE()),-1);
숫자함수
SELECT
ISNUMERIC('123') --> 숫자 이면 1 리턴
, ISNUMERIC('ABC') --> 숫자 아니면 0 리턴
, ROUND(123.5,0) --> 124.0 반올림
, FLOOR(123.5) --> 123 버림
, FLOOR(123.5/10) *10 --> 120
, CEILING(123.5) --> 124 올림
, CEILING(123.5/10)*10 --> 130
- 신용카드 결제금액에서 공급가, 부가세 분리하기
결제금액/1.1 를 반올림한 정수금액을 공급가,
결제금액/11 을 반올림한 정수금액을 부가세로 하면
공급가 + 부가세= 결제금액이 된다. - ceiling(올림), floor(버림)은 원단위를 정확히 맞추기 어렵다.
부가세는 11 로 나누면 소수점이 무조건 버려지므로 11.0 으로 나누어야 소수점으로 표현되어 반올림 효과가 난다.
이것을 다시 FLOOR한 것은 결과값을 정수형으로 표현하기 위함이다.
다음 처럼 ROUND한 다음 FLOOR해야 정수형이 된다.
DECLARE @A FLOAT = 2000 -- 8000
SELECT FLOOR(ROUND(@A/1.1, 0)) [SUP_AMT], FLOOR(ROUND(@A/11.0, 0)) [VAT_AMT]
숫자에 1000단위 콤마(,) 붙이기
SELECT REPLACE(CONVERT(VARCHAR,CONVERT(MONEY,123456),1),'.00','') -->123,456
문자함수
DECLARE @strString VARCHAR(100) = 'abcdefghijklmnopqrstuvwxyz1234567890가나다라마바사아자차카타파하'
SELECT
LEFT(@strString,3) -- 왼쪽 부터 원하는 만큼 문자읽어오기
, RIGHT(@strString,10) -- 오른쪽에서 부터 원하는 만큼 문자읽어오기
, SUBSTRING(@strString,4,5) -- 특정 위치에서부터 원하는 만큼 문자읽어오기
, LEN(@strString) -- 문자 단위 크기
, DATALENGTH(@strString) -- byte크기
, REPLICATE('0', 5 - DATALENGTH('123')) + '123' -- REPLICATE 지정한 횟수만큼 문자열 값을 반복합니다.
, 'add' + SPACE(5) + 'space' -- 지정한 횟수만큼 공백 추가
, STR(123) -- 숫자를 문자로 변환 ( 형 변환은 convert, cast 도 있음)
, CHARINDEX('0', @strString) -- 특정 문자열의 위치를 반환하는 함수
숫자 앞에 0 채우기 (0001, 0002 ~)
SELECT
Right('000' + CONVERT(varchar(10), 123), 4)
, Right('000' + LTRIM(STR(123)), 4)
, REPLICATE('0', 4 - DATALENGTH('123')) + '123'
CREATE FUNCTION LPAD(
@S VARCHAR(255), @N INT, @P VARCHAR(255) -- P는 앞에 채울 문자 주로 0
)
RETURNS VARCHAR(255)
AS
BEGIN
RETURN ISNULL(REPLICATE(@P,@N-LEN(@S)),'')+@S
END
CREATE FUNCTION ZERO_PAD( -- LPAD변형 앞자리에 0만채울수 있게
@S VARCHAR(255), @N INT
)
RETURNS VARCHAR(255)
AS
BEGIN
RETURN ISNULL(REPLICATE('0',@N-LEN(@S)),'')+@S
END
널(NULL) 함수
ISNULL(A, '0') : A가 널이면 '0'으로 치환(오라클의 NVL함수)
NULLIF(A, B) : A와 B가 같으면 널(NULL)값 반환
COALESCE(A,B,C,D) : A,B,C,D 중 최초로 널이 아닌값
RAND() 함수
11부터 20까지 사이의 정수를 랜덤하게 추출하는 할 경우
DECLARE @FROM INT = 11
DECLARE @TO INT = 20
SELECT CONVERT(INT, (@TO-@FROM+1) * RAND() + @FROM);
-- NEWID 를 사용한 랜덤값 추출도 가능
'개발 > MSSQL' 카테고리의 다른 글
[MSSQL] 날짜 형식 ( 포맷 ) 변환 (0) | 2016.12.16 |
---|---|
[MSSQL] 날짜 형식의 종류 (0) | 2016.12.16 |
[MSSQL] NEWID() (0) | 2016.12.15 |
[MSSQL] 테이블 리스트, 테이블 스키마 정보 (0) | 2016.12.14 |
[MSSQL] 동적쿼리 와 테이블 변수 (0) | 2016.12.14 |