반응형

group 별로 컬럼 내용 합치고 싶을때...

오라클에서는 LISTAGG mysql에서는 GROUP_CONCAT 을 썼었는데...

MSSQL에서는 또 다르다..

 

[TABLE]

ID NAME
ab 사과
ab 포도
cd
cd 곶감
cd 호떡

이런 테이블이 있다고 칩시다.

아래 쿼리를 수행하면 다음과 같이 결과가 나온다. 

SELECT DISTINCT ID
STUFF( (select ','+name from table p where p.id = b.id for xml path('') ),1,1,'') AS NAME2
FROM table B
ID NAME
ab 사과,포도
cd 귤,곶감,호떡

 

 

** STUFF : 문자열의 시작위치와 크기를 지정하여 원하는 문자로 치환
STUFF('[문자열]','[시작위치]','[크기]','[치환문자]')

** FOR XML PATH : 쿼리의 결과 데이터를 XML 형태로 표현

 

반응형
반응형

[MEMBER] 테이블

NAME ID
루피 LUFFY
뽀로로 PORORO
크롱 CRONG
포비 POBY

 

>> 예를 들어 외부에서 이름을 받아 해당하는 이름과 ID를 출력(반환)하는 프로시저를 생성하기 

(한 행만 반환하는 경우)

CREATE PROCEDURE PS_GETID(

@NAME VARCHAR(10) --파라미터로 받을 값

@NAME_OUTPUT VARHCAR(10) OUTPUT, --반환할 값은 OUTPUT을 붙여준다.
@ID VARCHAR(10) OUTPUT 	--반환할 값은 OUTPUT을 붙여준다.

)

AS
BEGIN
SET NOCOUNT ON 

--실행할 쿼리
SELECT @NAME_OUTPUT = NAME, @ID = ID FROM MEMBER WHERE NAME = @NAME FROM MEMBER
--@NAME을 매개변수로 @NAME_OUT과 @ID를 반환하기 

SET NOCOUNT OFF
RETURN
END
--실행을 시켜 생성해준다.

* SET NOCOUNT ON : SELECT, INSERT, UPDATE, DELETE의 영향을 받은 행의 개수를 출력하지 않도록 설정.

 

>> 생성한 프로시저 확인

SP_HELPTEXT PS_GETID

 

>> 생성한 프로시저 수정

ALTER PROCEDURE PS_GETID(

-- 아래 내용은 같되 CREATE만 ALTER로 바꿔주면 됨

 

>> 생성한 프로시저를 사용하여 결과값을 변수에 담기

DECLARE @ID VARCHAR(10) --결과값을 받아올 변수 생성
DECLARE @NAME_OUTPUT VARCHAR(10) --결과값을 받아올 변수 생성

--프로시저 생성. 파라미터와 결과값변수 넘겨주기
--프로시저 결과가 변수에 담긴다.
EXEC PS_GETID 'LUFFY',@ID OUTPUT, @NAME_OUTPUT OUTPUT;


SELECT @ID, @NAME --EXEC 결과 조회

 

>> 프로시저에서 반환한 여러 행을 받을 경우

테이블 변수에 프로시저 결과를 담아 사용한다.

-- 여러 행을 반환하는 프로시저를 만든다.
CREATE PROCEDURE PS_GETTABLE
AS 
BEGIN
	SELECT * FROM MEMBER
END
DECLARE @TEMP TABLE(
	NAME VARCHAR(10),
	ID VARCHAR(10)
) --테이블 변수를 만든다.

-- 프로시저 결과를 테이블변수에 담는다.
INSERT INTO @TEMP EXEC PS_GETTABLE

-- 조회
SELECT * FROM @TEMP

 

여러개의 변수를 프로시저 파라미터로 넘기고 싶은 경우

위와 비슷하게 테이블 변수를 매개변수로 넘겨보자...

반응형
반응형

table에서 특정 행만 출력하기.

예를 들어 아래 테이블에서 2번째 행만 가져오기.

[MEMBER] 테이블

ID NAME
HONG 길동
PI 카츄
DUL

요약) 순번 열을 만들어 준 후 SELECT 하면 됨.

 

1. ROW_NUMBER()로 순번 열을 만들어 주기

SELECT ROW_NUMBER() OVER(order by ID asc) as 'NO', ID, NAME 
FROM MEMBER;

쿼리 결과

NO ID NAME
1 DUL
2 HONG 길동
3 PI 카츄

 

 

2. 순번 열을 만들어준 테이블을 임시테이블로 생성하거나 테이블 변수에 넣어서 거기서 select 하면 댐.

A) 임시테이블로 생성한 후에 SELECT하기 

WITH TEMP AS 
(
  SELECT ROW_NUMBER() OVER(order by ID asc) as 'NO', ID, NAME 
  FROM MEMBER
) --임시테이블 생성

SELECT * FROM TEMP WHERE NO=2; --2번째 열 SELECT

 

B) 테이블 변수에 넣어서 SELECT하기

DECLARE @TEMP TABLE( --테이블 변수 생성
	NO INT,
	ID VARCHAR(10),
	NAME VARCHAR(10)
)

--테이블 변수에 SELECT결과 넣기
INSERT INTO @TEMP 
SELECT ROW_NUMBER() OVER(order by ID asc) as 'NO', ID, NAME FROM MEMBER


SELECT * FROM @TEMP WHERE NO=2; --2번째 열 SELECT

 

머가 편한지는 선택 

반응형
반응형

기간 검색 날짜 시작일이 20220101, 종료일이 20220301인경우

검색하려는 기간이 유효 범위 안에 있는지 검사하는 함수.

예를 들어 시작일로부터 한달까지만 검색할 수 있는 경우.

$('#startdate').val()		//20220101 
$('#enddate').val()		//20220301


//시작일로부터 days 일 뒤 까지는 검색이 유효함.
function dateValiChk(days){	
	//new Date(2022,0,1)를 사용하여 날짜 세팅.
	var sdate = new Date($('#startdate').val().substring(0,4),$('#startdate').val().substring(4,6)-1,$('#startdate').val().substring(6,8));
		
	//new Date(2022,2,1)를 사용하여 날짜 세팅.
	var edate = new Date($('#srchedate').val().substring(0,4),$('#enddate').val().substring(4,6)-1,$('#enddate').val().substring(6,8));
		
	//출력 결과 Sat Jan 01 2022 00:00:00 GMT+0900    
	console.log('sdate : ' + sdate);
	//출력 결과 Tue Mar 01 2022 00:00:00 GMT+0900
	console.log('edate : ' + edate); 
		
        
	//검사 기준 date 만들기
	var validDate = sdate;
	//시작날짜에서 유효한 days를 더해줌 ex)31일
	validDate.setDate(validDate.getDate()+days);
        
	//출력 결과 Tue Feb 01 2022 00:00:00 GMT+0900
	console.log('validDate : ' + validDate);  
        
	if(validDate < edate ){ //끝날짜가 검사기준 날짜보다 큰 경우
		return '검색 기간은 최대 1개월입니다.';		
	}else{
		return 'success';
	}
}


dateValiChk(31); //결과 fail

 

javascript date 기본 

var myDate1 = new Date(); // 현재 date 구하기
var myDate2 = new Date(2022,2,3); // 2022년 3월 3일 날짜세팅
var myDate3 = new Date('2022-03-03'); // 2022년 3월 3일 날짜세팅

var myDate4 = myDate3.getDate(); //날짜 get
myDate4.setDate();
반응형
반응형

 

INSERT INTO myTable (ID, Name) VALUES ('2', 'myName')

테이블에 insert를 하려는데 이런 에러가 뜬다... 

[ IDENTITY_INSERT가 OFF로 설정되면 .... 명시적 값을 삽입할 수 없습니다. ]

 

 

* identity 속성 : 숫자형식의 컬럼에 대해 지정된 초기값과 증가치를 주어 insert시 마다 자동으로 증가되며 값이 발생된다. 

 

예를 들어 table 생성시에

CREATE TABLE myTable(
	[ID] [decimal](9, 0) IDENTITY(1,1) NOT NULL --1부터 1씩증가
)

IDENTITY 속성을 주면  INSERT시에 ID값을 주지 않아도 

즉 자동으로  들어간다고 생각하면 됨..

이걸 임의로 값을 넣으려고 하니 에러가 나는 것. 

 

-> INSERT시에 해당 컬럼에 임의로 값을 넣고 싶다면

 

SET IDENTITY_INSERT [테이블이름] ON

 

->ON설정을 해주고 INSERT 후에 다시 OFF를 해주자.

SET IDENTITY_INSERT [테이블이름] OFF

 

 

 

 

반응형
반응형

vanilla js로 radio 타입 체크 여부 control

<input type="radio" name="pick" value="1">
<input type="radio" name="pick" value="2">
<input type="radio" name="pick" value="3">
document.getElementsByName('pick').item(3).checked=true
반응형
반응형

eclipse에서 SVN을 사용하는경우에

레포지토리에 소스를 업로드 하거나(commit) 내 로컬의 소스를 업데이트하는 방법(git의 경우 pull)

 

1. 프로젝트 우클릭 > Team > Synchronize With Repository

원격 레포지토리와 싱크를 맞추기 위함.  commit해야 하거나 땡겨와야 하는 소스를 확인할 수 있다. 

perspective 모드가 아래와 같이 Team Synchronizing 로 바뀐다.

 

2. Team Synchronizing 모드에서는 왼쪽 창에 파일이 아래와 같이 표시된다.

파일에 달린 화살표의 의미는 아래와 같다.

레포지토리에 update 된 파일
local에 반영 안 된 파일
내가 땡겨와야(update)  할 파일임

 local에서 수정된 파일
레포지토리에 반영 안 된 파일
commit해야 할 파일

local에서도 수정되고
레포지토리에서도
수정되어서 충돌이 난 파일.
해당 파일을 우클릭하여
update를 눌러 땡겨오면 됨
해당 파일을 우클릭하여
commit(업로드) 
혹은
Override and Update
파일 내용을 비교하여 편집한뒤
파일을 우클릭하여 update

 

* 파일 비교/편집하는 법? 

파일을 더블클릭하면 내 로컬 파일과 원격저장소에 있는 파일을 비교할 수 있는 창이 열림

왼쪽이 내 Local 파일, 오른쪽이 원격저장소 파일임.

추가된 부분이 있으면 저렇게 파란줄, 충돌나는 부분은 빨간색으로 표시되며 가운데 네모에 커서를 눌러서 왼쪽/오른쪽 내용을 가지고 덮을 수 있음.

편집 및 확인을 다 했으면 파일 우클릭하여 commit이나 update 진행

 

* 파일 나눠보는 법? 

왼쪽 상단 모드 아이콘 확인. 

왼쪽부터 Incoming Mode,   Outgoing Mode,   Incoming/Outgoing Mode

* update 할 파일만 보기 : Incoming Mode 선택

* commit 할 파일만 보기 : Outgoing Mode 선택

* 둘 다 보기 : Incoming/Outgoing Mode

 

반응형
반응형

Cache-Control 헤더 : 캐시 관련 정책 설정 헤더

1. max-age

캐시 유지 시간.

max-age=0 인 경우 캐시서버의 캐시된 entry에 대해서 원본서버(웹서버)로 유효성 검증을 다시하라는 의미. 유효성 검증을 다시 한다는 것은 캐시에 저장되어 있는 파일이 fresh한 상태라도 원본서버에 있는 파일과의 동일성 유무를 무조건 체크하라는 의미. -> 요청이 많을 경우 원본 서버에 부하를 일으킬 가능성이 있음.

 

2. no-cache

원본서버(웹서버)로부터 무조건 다시 읽어서 응답하라는 의미. max-age=0인 경우는 동일성 유무에 대해서만 매번 체크하지만 no-cache의 경우에는 무조건 원본서버에서 읽어 응답한다는 차이가 있다.

 

3. no-store

캐시 자체를 저장하지 않음

 

출처) 탑스팟 알기사 정보보안기사 교재

반응형
반응형

 


1. ftp-simple Extensions 설치
 - VSCode 에서 FTP 접속을 도와주는 패키지
2. F1 검색 > ftp-simple config setting  > 접속 정보 입력 (JSON)
 - 접속할 서버 및 경로 지정
3. F1 검색 ==> ftp-simple remote directory 선택
 - 접속 연결

반응형
반응형

특정 페이지의 html 소스를 텍스트로 가져오려고 함.


const request = new XMLHttpRequest();
const url = 'https://localhost:8080/test'; // 소스 가져올 페이지 

request.open('GET', url, true);
request.onload = function () {
var htmlText = request.responseText;
}

console.log(htmlText);

 

반응형

+ Recent posts