반응형

ROW_NUMBER() OVER PARTITION BY ORDER BY

PARTITION BY 기준으로 그룹핑한 뒤 ORDER BY로 순번 매기는 함수.

 

예를 들어 아래와 같은 테이블이 있다

@TEMP 테이블임.

@TEMP 테이블

 

[ REG_DATE 를 기준으로 그룹핑하여 ID 순으로 순번 매기기]

SELECT
	ID,
	REG_DATE, 
	ROW_NUMBER() OVER ( PARTITION BY REG_DATE ORDER BY ID ) 
FROM @TEMP

결과

11/1에는 김치와 콩차반을 샀군요

 

[ ID 를 기준으로 그룹핑하여 REG_DATE 순으로 순번 매기기]

SELECT
	ID,
	REG_DATE,
	ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY REG_DATE ) 
FROM @TEMP

결과

김부각은 11월 2일과 11월 10일 두 번 샀군요

 

이렇게 쓰는 것이었다

반응형
반응형

input type이 number인경우 maxlength 속성이 안 먹습니다.

함수를 걸어줘야 합니다.

<input type="number" maxlength="4" oninput="maxLengthCheck(this)"/>

해당 dom의 maxlength속성을 사용하므로 maxlength 속성은 지우면 안 댐.

<script type="text/javascript">
	
function maxLengthCheck(object){
  if (object.value.length > object.maxLength){
   object.value = object.value.slice(0, object.maxLength);
  }    
}
  
</script>
반응형
반응형

html 

<input type="radio" name="doughnut" id="doughnut" value="doughnut">
<label for="doughnut">도넛</label><br>

 

javascript

[이름이 doughnut인 label 선택해서 text 변경하기]

$("label[for = 'doughnut' ]").text("맛있어");

 

반응형
반응형

[name이 같은 여러개의 dom 요소]

<input class="setNum" type="number" value="0" name="myItem" >
<input class="setNum" type="number" value="0" name="myItem" >
<input class="setNum" type="number" value="0" name="myItem" >
<input class="setNum" type="number" value="0" name="myItem" >

 

[ name으로 dom 찾기 ]

//4개의 dom요소가 선택된 상태
document.getElementsByName('myItem');

 

[ name으로 찾은 dom의 개수 ]

document.getElementsByName('myItem').length;

 

[ i번째 item 선택하기 ]

document.getElementsByName('myItem').item(i);


//변수에 넣어서 사용할 때
var myItem=document.getElementsByName('myItem'); 
myItem[i];

 

[ i번째 item value 설정 ]

document.getElementsByName('myItem').item(i).value=0

 

 

반응형
반응형

가만있다가도 아래와 같은 에러 발생. 이클립스랑 tomcat조합은 정말이지 너무싫다

java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]

Failed to start component [StandardEngine[Catalina]

Caused by: java.lang.NoClassDefFoundError: FilterConfig

Failed to start component [StandardServer[8005]]

이것저것 다 해봐도 안 되다가 아래 방법으로 해결함

 

1. 프로젝트 우클릭 > [Build Path] > [Configure Build Path]

[Libraries] 에서 [JDK]가 잘 들어가 있는지 보고 [Server Runtime]도 확인. 나는 Server Runtime에 문제가 있어서 에러가 났던것임.

 

 

2. 프로젝트 우클릭 > [Run As] > [Run Configurations]

왼쪽의 [Apache tomcat] 에서 맞는 서버가 선택되어 있는지 확인하고 Arguments도 올바르게 들어갔는지 확인.

반응형
반응형

유튭 영상 우클릭 > 소스코드 복사하여 iframe을 따온다.
소스에 붙여넣기 하면 됨.

 

PC 웹에 추가 

* 자동재생을 하려면 링크 끝에 아래 텍스트 추가
?autoplay=1&mute=1

<iframe width="1000" height="562.5" src="https://youtu.be/aBcDEFGh3IJ?autoplay=1&mute=1" title="영상제목" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>

 

모바일버전 웹에 추가 


* 모바일에서 자동재생을 하려면 IFame Player API를 사용하면 됨.
참고)https://developers.google.com/youtube/iframe_api_reference

//youtube 영상을 표시할 div
<div id="player1" style="width:100%">

//youtube 스크립트 파일 url 추가
<script src="https://www.youtube.com/iframe_api"></script>

//자동재생 함수 추가
<script>
var player;
function onYouTubeIframeAPIReady() {
	player = new YT.Player('player1', {
		videoId: 'aBcDEFGh3IJ', //유튭 영상ID
		playerVars: {   
				'autoplay': 1, //자동재생
				'rel': 0,
				'showinfo': 0,
				'modestbranding': 1,
				'playsinline': 1,
				'rel': 0,
				'controls': 1,	//youtube 콘트롤 표시
				'color':'white',
				'loop': 1, //반복 여부  
		},
		events: {
		'onReady': onPlayerReady,
		}
	});
}

function onPlayerReady(event) {
	player.playVideo();
	player.mute(); //자동재생하려면 mute해야함
}

</script>
반응형
반응형

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();
반응형

+ Recent posts