728x90

convert 함수를 통해 문자를 숫자, 숫자를 문자로 데이터 타입을 변환할 수 있다.

문법
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

 

데이터 형변환 표
번호 쿼리  결과 코드
 0  CONVERT(CHAR(19), DATETIME, 0)  01 02 2000 1:14PM  MM DD YYYY H:MM
 1  CONVERT(CHAR(10), DATETIME, 1)  01/02/2000  MM/DD/YYYY
 2  CONVERT(CHAR(8), DATETIME, 2)  00.01.02  YY.MM.DD
 3  CONVERT(CHAR(8), DATETIME, 3)  02/01/00  DD/MM/YY
 4  CONVERT(CHAR(8), DATETIME, 4)  02.01.00  DD.MM.YY
 5  CONVERT(CHAR(8), DATETIME, 5)  02-01-00  DD-MM-YY
 6  CONVERT(CHAR(8), DATETIME, 6)  02 01 00  DD MM YY
 7  CONVERT(CHAR(9), DATETIME, 7)  01 02, 00  MM DD, YY
 8  CONVERT(CHAR(8), DATETIME, 8)  13:14:15  HH:MM:SS
 9  CONVERT(CHAR(26), DATETIME, 9)  01 02 2000 1:14:15.678PM  NN DD YYYY H:MM:SS.MS
 10  CONVERT(CHAR(8), DATETIME, 10)  01-02-00  MM-DD-YY
 11  CONVERT(CHAR(8), DATETIME, 11)  02/01/00  DD/MM/YY
 12  CONVERT(CHAR(6), DATETIME, 12)  000102  YYMMDD
 13  CONVERT(CHAR(24), DATETIME, 13)  02 01 2000 13:14:15.678  DD MM YYYY HH:MM:SS.MS
 14  CONVERT(CHAR(12), DATETIME, 14)  13:14:15.678  HH:MM:SS.MS
 20  CONVERT(CHAR(19), DATETIME, 20)  2000-01-02 13:14:15  YYYY-MM-DD HH:MM:SS
 21  CONVERT(CHAR(23), DATETIME, 21)  2000-01-02 13:14:15.678  YYYY-MM-DD HH:MM:SS.MS
 22  CONVERT(CHAR(20), DATETIME, 22)  01/02/00 1:14:15 PM  MM/DD/YY H:M:S
 23  CONVERT(CHAR(10), DATETIME, 23)  2000-01-02  YYYY-MM-DD
 24  CONVERT(CHAR(8), DATETIME, 24)  13:14:15  HH:MM:SS
 25  CONVERT(CHAR(23), DATETIME, 25)  2000-01-02 13:14:15.678  YYYY-MM-DD HH:MM:SS.MS
 100  CONVERT(CHAR(19), DATETIME, 100)  01 02 2000 1:02PM  MM DD YYYY H:MM
 101  CONVERT(CHAR(10), DATETIME, 101)  01/02/2000  MM/DD/YYYY
 102  CONVERT(CHAR(10), DATETIME, 102)  2000.01.02  YYYY.MM.DD
 103  CONVERT(CHAR(10), DATETIME, 103)  02/01/2000  DD/MM/YYYY
 104  CONVERT(CHAR(10), DATETIME, 104)  02/01/2000  DD/MM/YYYY
 105  CONVERT(CHAR(10), DATETIME, 105)  02-01-2000  DD-MM-YYYY
 106  CONVERT(CHAR(11), DATETIME, 106)  02 01 2000  DD MM YYYY
 107  CONVERT(CHAR(12), DATETIME, 107)  01 02, 2000  MM DD, YYYY
 108  CONVERT(CHAR(8), DATETIME, 108)  13:14:15  HH:MM:SS
 109  CONVERT(CHAR(26), DATETIME, 109)  01 02 2000 1:14:15.678PM  MM DD YYYY H:MM:DD.MS
 110  CONVERT(CHAR(10), DATETIME, 110)  01-02-2000  MM-DD-YYYY
 111  CONVERT(CHAR(10), DATETIME, 111)  2000/01/02  YYYY/MM/DD
 112  CONVERT(CHAR(8), DATETIME, 112)  20000102  YYYYMMDD
 113  CONVERT(CHAR(24), DATETIME, 113)  02 01 2000 13:14:15.678  DD MM YYYY HH:MM:DD.MS
 114  CONVERT(CHAR(12), DATETIME, 114)  13:14:15:678  HH:MM:DD:MS
 120  CONVERT(CHAR(19), DATETIME, 120)  2000-01-02 13:14:15  YYYY-MM-DD HH:MM:SS
 121  CONVERT(CHAR(23), DATETIME, 121)  2000-01-02 13:14:15.678  YYYY-MM-DD HH:MM:SS.MS
 126  CONVERT(CHAR(23), DATETIME, 126)  2000-01-02T13:14:15.678  YYYY-MM-DDT HH:MM:SS.MS
 127  CONVERT(CHAR(23), DATETIME, 127)  2000-01-02T13:14:15.678  YYYY-MM-DDT HH:MM:SS.MS
 131  CONVERT(CHAR(25), DATETIME, 131)  1/06/1421 1:13:14:678PM  

 

**데이터 타입 참고

https://developerking.tistory.com/6

 

[MSSQL] 데이터 타입 (자료형) 유형 총정리

MSSQL / SQL Server 자료형유형자료형정수bigint-2^63(-9,223,372,036,854,775,808) ~ 2^63-1(9,223,372,036,854,775,807) 8바이트int-2^31(-2,147,483,648) ~ 2^31-1(2,147,483,647) 4바이트smallint-2^15(-32,768) ~ 2^15-1(32,767) 2바이트tinyint0 ~ 2

developerking.tistory.com

 

728x90
728x90

declare @날짜datetime

set @날짜='0000-00-00'

 

전월 첫째날

SELECT dateadd(d,-day(@날짜)+1,@날짜)

 

전월 마지막 날짜

SELECT dateadd(d,-day(dateadd(m,1,@날짜)), dateadd(m,1,@날짜))

현재월의 첫째날

SELECT dateadd(d,-day(@날짜)+1,@날짜)

 

현재월의 마지막날


SELECT dateadd(d,-day(dateadd(m,1,@날짜)), dateadd(m,1,@날짜))

 

** DATEADD 함수

SELECT DATEADD(날짜형식, 값, 날짜)

 

728x90
728x90
UNION , UNION ALL 차이점 및 사용방법

 

둘 다 SELECT 조회의 결과문을 하나로 합치는 연산자 (합집합 같은 것)

UNION 은 중복을 제거하고 UNION ALL 은 중복을 포함하여 반환한다.

 

기본규칙
select employee_id, job_id
from employees
union
select employee_id, job_id
from job_history;

 

1) 열의 개수와 순서가 동일해야함

2) 데이터 형식이 동일해야함

 

INSERSECT

양쪽 모두의 교집합만 반환

 

select employee_id, job_id
from employees
intersect
select employee_id, job_id
from job_history;

 

* 그림으로 이해

728x90
728x90

MS SQL TEMP TABLE 사용 :

select 시 테이블이 무거울 경우 temp 테이블에 넣고 작업할 수 있다

 

임시테이블 만들기 / drop
CREATE TABLE #Temp(
 Idx int ,
 UserId varchar(36)
)

DROP  TABLE #Temp

** 두개(##)가 쓰이면 전역임시Table

 

 

데이터 select 후 임시테이블에 insert
INSERT INTO #TMP_TABLE
SELECT Idx ,
UserId
FROM (
넣으려는 데이터
)

 

 

OBJECT_ID 함수

테이블에 개체 ID가 있는 지 확인한 후 drop 할 수 있음

IF OBJECT_ID('tempdb.dbo.#TMP_TABLE', 'U') IS NOT NULL
BEGIN DROP TABLE #TMP_TABLE END

(오라클의 경우 CREATE OR REPLACE 를 사용하면 CREATE 할 때 기존에 같은 이름의 개체가 있으면

REPLACE 하고 개체가 없으면 CREATE 하는 기능이 있지만 MS SQL Server 에는 없음)

728x90
728x90

@@ROWCOUNT

쿼리 실행문 실행 후 영향을 받은 로우의 수를 반환

별도 초기화하지 않으면 계속 유지

select, update, delete등 쿼리에서 사용 가능

 

예제

UPDATE #TEMP1 SET 가격 = 3000 WHERE 제품 = '티셔츠' SELECT

@@ROWCOUNT -- 결과 : 2

조건 맞는 2개 행만 영향을 받음

 

> rowcount 개수 따라 조건 설정

IF @@ROWCOUNT = 0 BEGIN INSERT INTO 테이블명 (유저명, 방문수) VALUES (@UserName, 1) END

 

> 지정 된 수 반환하면 쿼리 중지 

SET ROWCOUNT { number | @number_var }

 

SET ROWCOUNT 4; SELECT * FROM Production.ProductInventory WHERE Quantity < 300; GO --

(4 row(s) affected)

 

참고

https://learn.microsoft.com/ko-kr/sql/t-sql/statements/set-rowcount-transact-sql?view=sql-server-ver16

728x90

'MS SQL > MS SQL' 카테고리의 다른 글

MSSQL : UNION , UNION ALL, INTERSECT  (0) 2023.02.27
MS SQL : TEMP TABLE, OBJECT_ID  (0) 2023.01.31
MSSQL - 프로시저 생성,조회,삭제,찾기  (0) 2022.05.13
MS SQL : distinct 중복 값 제거  (0) 2022.05.04
MS SQL : ROW NUM  (0) 2022.04.28
728x90

>프로시저란?

프로그래머가 생성해놓은 쿼리문을 마치 하나의 메서드 형식으로 관리하는 것

 

>프로시저 생성, 조회, 삭제 쿼리

생성

CREATE PROC [프로시저명] AS [쿼리문]

 

조회

sp_helptext [프로시저명]

 

삭제

DROP PROCEDURE [프로시저명]

 

> MSSQL에서 내가 원하는 내용이 포함된 프로시저를 찾는 쿼리

SELECT OBJECT_NAME(object_id),

OBJECT_DEFINITION(object_id)

FROM sys.procedures

WHERE OBJECT_DEFINITION(object_id) LIKE '%검색할 키워드%'

 

>개체 탐색기에서 찾기

- 프로그래밍 기능 > 저장 프로시저 > 필터 후 > 새 스크립팅하면 기존 프로시저 정보 볼 수 있음

728x90

'MS SQL > MS SQL' 카테고리의 다른 글

MSSQL : UNION , UNION ALL, INTERSECT  (0) 2023.02.27
MS SQL : TEMP TABLE, OBJECT_ID  (0) 2023.01.31
MS SQL : @@rowcount 영향받은 행 수 반환  (0) 2022.11.28
MS SQL : distinct 중복 값 제거  (0) 2022.05.04
MS SQL : ROW NUM  (0) 2022.04.28
728x90

[형태]
select로 DB에서 조회할 때 중복되는 값을 제거, distinct를 붙인 컬럼은 중복을 합쳐 한번만 출력된다
select distinct 필드 from 테이블

[예제]

해당 테이블에서 sell_date별로 product를 뽑을 때, 항목이 겹침 > product에 distinct를 써줌

 select
      distinct product,
      sell_date
  from activities  

 

[특징]
1) count와 함께 사용가능함
count(distinct product) as num_sold -> product 항목 중복없이 개수 카운팅

2) distinct 뒤에 2개 이상의 컬럼 사용
모든 컬럼을 하나로 인식하여 그 행의 중복을 제거함
select distict product name, product type from table -> 두 컬럼 모두 중복 제거

 

3) 동일한 결과를 출력할 수 있다면 distinct 보다 group by가 db부담을 줄이고 속도도 빠름

728x90

'MS SQL > MS SQL' 카테고리의 다른 글

MSSQL : UNION , UNION ALL, INTERSECT  (0) 2023.02.27
MS SQL : TEMP TABLE, OBJECT_ID  (0) 2023.01.31
MS SQL : @@rowcount 영향받은 행 수 반환  (0) 2022.11.28
MSSQL - 프로시저 생성,조회,삭제,찾기  (0) 2022.05.13
MS SQL : ROW NUM  (0) 2022.04.28
728x90

[정의]

쿼리에 의해 반환되는 행 번호를 출력

데이터에 순번을 메기거나, 특정 번호 데이터를 출력할 때 사용

 

[문법] 

select * from 테이블 where rownum between 1 and 5
> between과 함께 사용가능


select * from (select rownum num, member.* from member) where num between 1 and 5
-> select rownum 부분을 member테이블에 합침 num이라는 별칭을 붙임

rownum 뒤에 별칭 붙일 수 있음

select * from (select rownum num, notice.* from notice)
where num between 1 and 5;
>rownum으로 테이블을 따로 생성해서 데이터 출력할 수 있다. 기존 notice가 아니고 활용한 새로운 결과 집합임

 

ROW_NUMBER() OVER ([PARTITION BY value_expression, ... [n]] order_by_clause)

> over partition by와 함께 사용가능

 

[예제]

SELECT JOB, ENAME, SAL 
     , RANK( ) OVER (ORDER BY SAL DESC) RANK
     , ROW_NUMBER() OVER (ORDER BY SAL DESC) ROW_NUMBER
  FROM EMP; 

JOB       ENAME             SAL       RANK ROW_NUMBER
--------- ---------- ---------- ---------- ----------
PRESIDENT KING             5000          1          1
ANALYST   FORD             3000          2          2
ANALYST   SCOTT            3000          2          3
MANAGER   JONES            2975          4          4
MANAGER   BLAKE            2850          5          5
MANAGER   CLARK            2450          6          6
SALESMAN  ALLEN            1600          7          7
SALESMAN  TURNER           1500          8          8
CLERK     MILLER           1300          9          9
SALESMAN  WARD             1250         10         10
SALESMAN  MARTIN           1250         10         11
CLERK     ADAMS            1100         12         12
CLERK     JAMES             950         13         13
CLERK     SMITH             800         14         14

 

참고 : http://www.gurubee.net/lecture/2382

728x90
728x90

https://leetcode.com/problems/swap-salary/

 

Swap Salary - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

[problem]

성별 f,m 인경우 전체 바꿔버리기

[analysis]

1. update이용해서 데이터 업뎃

-> UPDATE 테이블이름

SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...

WHERE 필드이름=데이터값

 

2.. case when 이용해서 f인 경우, m인 경우 분리

-> case when 문법 : CASE WHEN 조건절 THEN 참일때 값 ELSE 거짓일 때 값 END 컬럼명

 

[solution]

728x90
728x90

https://leetcode.com/problems/customer-placing-the-largest-number-of-orders/

 

[problem]

 order_number가 가장 많은 customer 출력

[anlysis]

1. order no 가장많은 =  select top 1이용

2. count(*) 

select 변수 order by count(*)를 통해 행의 개수를 출력할 수 있다

 

[solution]

728x90

+ Recent posts