집 >데이터 베이스 >MySQL 튜토리얼 >SQL 데이터 작업의 기초(중급) 10
날짜 및 시간 조작
날짜 및 시간 기능은 웹사이트 구축에 매우 유용합니다. 사이트 소유자는 테이블의 데이터가 업데이트되는 시점에 관심을 갖는 경우가 많습니다. 날짜 및 시간 함수를 사용하면 밀리초 수준에서 테이블 변경 사항을 추적할 수 있습니다.
현재 날짜와 시간을 반환
GETDATE() 함수를 통해 현재 날짜와 시간을 얻을 수 있습니다. 예를 들어 SELECT 문은
GETDATE()는 다음 결과를 반환합니다.
……………………..
NOV 30 1997 3:29AM
(1
행
영향을 받음)
분명히 앞으로 이 기능을 사용하게 되면, 받는 날짜는 이 시간보다 늦거나 이전이 될 것입니다.
GETDATE() 함수를 DATEDIME() 유형 필드의 기본값으로 사용할 수 있습니다. 레코드 삽입 시 현재 시간을 저장하는데 유용합니다. 예를 들어, 사이트 활동 로그를 보관하는 테이블이 있다고 가정해 보겠습니다. 방문자가 사이트를 방문할 때마다 테이블에 새 기록을 추가하여 방문자의 이름, 활동 및 방문 시간을 기록합니다. 레코드에 현재 날짜와 시간이 포함된 테이블을 생성하려면 DATETIME 필드를 추가하고 해당 기본값이 GETDATE() 함수의 반환 값이 되도록 지정할 수 있습니다.
CREATE
TABLE site_log(
사용자 이름 VARCHAR(40),
사용자 활동
VARCHAR(100),
입력 날짜 DATETIME DEFAULT
GETDATE())
날짜 및 시간 변환
이전 섹션의 예에서 GETDATE() 함수의 반환 값은 초까지만 표시된다는 점을 눈치챘을 것입니다. 실제로 SQL은
서버 내부 시간은 밀리초 수준까지 정확할 수 있습니다(정확하게는 3.33밀리초까지 정확할 수 있음).
날짜와 시간을 다른 형식으로 얻으려면 CONVERT() 함수를 사용해야 합니다. 예를 들어, 다음 문이 실행되면 표시되는 시간에는 밀리초가 포함됩니다.
SELECT
CONVERT(VARCHAR(30),GETDATE(),9)
예제에서는 숫자 9를 사용했습니다. 이 숫자는 날짜와 시간을 표시할 때 사용할 날짜 및 시간 형식을 지정합니다. 이 명령문이 실행되면 다음 날짜와 시간이 표시됩니다.
……………………………………..
Nov
30 1997 3:29:55:170AM
(1행)
영향을 받음)
CONVERT() 함수에서는 다양한 스타일의 날짜 및 시간 형식을 사용할 수 있습니다. 표 11.1에는 모든 형식이 나와 있습니다.
표 11.1
날짜 및 시간 유형
유형 값 표준 출력
0 기본 mon dd yyyy hh:miAM
1 USA
mm/dd/yy
2 ANSI yy.mm.dd
3 영국/프랑스어 dd/mm/yy
4 독일어
dd.mm.yy
5 이탈리아어 dd-mm-yy
6 - dd mon yy
7 - 월
dd,yy
8 - hh:mi:ss
기본값 + 밀리초--mon dd yyyy
hh:mi:ss:mmmAM(또는 )
10 USA mm-dd-yy
11 JAPAN
yy/mm/dd
12 ISO yymmdd
13 유럽 기본값 + 밀리초--dd mon
yyyy
hh:mi:ss:mmm(24h)
14 -
hh:mi:ss:mmm(24h)
0, 9, 13을 입력하면 항상 4자리 연도가 반환됩니다. 다른 유형의 경우 세기를 표시하려면 스타일 값에 100을 추가하세요. 유형 13과 14는 24시간제로 시간을 반환합니다. 유형 0, 7, 13은 월을 3자 표현으로 반환합니다(11월에는 Nov 사용).
표 11.1에 나열된 각 형식에 대해 유형 값에 100을 추가하여 연도와 세기를 표시할 수 있습니다. (예를 들어 00년은 2000년으로 표시됩니다.) 예를 들어, 세기를 포함하여 일본 표준에 따라 날짜를 표시하려면 다음 문을 사용합니다.
SELECT
CONVERT(VARCHAR(30), GETDATE(), 111)
이 예에서 CONVERT() 함수는 날짜 형식을 변환하여 1997/11/30으로 표시합니다.
날짜를 추출합니다. 및 시간
많은 경우 전체 날짜와 시간이 아닌 날짜와 시간의 일부만 가져오고 싶을 수도 있습니다. 예를 들어, 사이트 디렉터리의 각 사이트가 쿼리된 달을 나열한다고 가정해 보겠습니다. 이 시점에서는 전체 날짜와 시간이 페이지를 복잡하게 만드는 것을 원하지 않습니다. 날짜의 특정 부분을 추출하려면 다음과 같이 DATEPART() 함수를 사용할 수 있습니다.
SELECT
site_name '사이트 이름',
DATEPART(mm,site_entrydate) '게시 월' FROM
site_directory
DATEPART() 함수의 매개변수는 두 개의 변수입니다. 첫 번째 변수는 추출할 날짜 부분을 지정합니다. 두 번째 변수는 실제 데이터입니다. 이 예에서 mm은 월을 나타내므로 DATEPART() 함수는 월을 추출합니다. 아래는 SELECT입니다.
문의 출력 결과:
사이트 이름 월
게시됨
......................................................................................................
Yahoo 2
Microsoft
5
Magicw3 5
(3개 행이 영향을 받음)
월
게시됨 열에는 각 사이트가 쿼리된 달이 표시됩니다. DATEPART() 함수의 반환 값은 정수입니다. 표 11.2에 표시된 대로 이 함수를 사용하여 날짜의 다양한 부분을 추출할 수 있습니다.
표 11.2
날짜 부분 및 약어
날짜 부분 약어 값
연도 yy 1753--9999
분기 QQ 1--4
월 mm
1--12
일 dy 1--366
일 dd 1--31
주 주
1--53
평일 dw 1--7(일요일-토요일)
시간 hh
0--23
분 mi 0--59
초 ss 0--59
밀리초 ms
0--999
날짜와 시간을 비교해야 할 때 DATEPART() 함수를 사용하여 정수를 반환하는 것이 유용합니다. 그러나 위 예의 쿼리 결과(2, 5)는 읽기가 쉽지 않습니다. 보다 읽기 쉬운 형식으로 부분 날짜 및 시간을 얻으려면 다음 예와 같이 DATENAME() 함수를 사용할 수 있습니다.
SELECT
site_name '사이트 이름'
DATENAME(mm,site_entrydate) '월
게시됨'
FROM
site_directory
DATENAME() 함수와 DATEPART() 함수는 동일한 매개변수를 받습니다. 그러나 반환 값은 정수가 아닌 문자열입니다. 위 예제에서 DATENAME()을 사용하여 얻은 결과는 다음과 같습니다.
Site
이름 월 포스텍
……………………………………………….
Yahoo
2월
Microsoft 6월
Magicw3 6월
(3행)
영향을 받음)
DATENAE() 함수를 사용하여 요일을 추출할 수도 있습니다. 다음 예에서는 요일과 날짜의 월을 모두 추출합니다.
SELECT
site_name '사이트 이름',
DATENAME(dw,site_entrydate)+ '-' +
DATENAME(mm,site_entrydate)
'게시된 날짜 및 월' FORM
site_directory
이 예제를 실행하면 다음 결과가 반환됩니다.
사이트 이름 일 및 월
게시됨
…………………………………………………………
야후 프라이데이 -
2월
Microsoft 화요일 - 6월
Magicw3 월요일 - 6월
(3
행
영향을 받음)
반환 날짜 및 시간 범위
테이블의 데이터를 분석할 때 특정 시간에 대한 데이터를 검색하고 싶을 수 있습니다. 특정 날짜(예: 2000년 12월 25일)의 사이트 방문자 활동에 관심이 있을 수 있습니다. 이러한 유형의 데이터를 검색하려면 다음과 같은 SELECT 문을 사용해 볼 수 있습니다.
SELECT
* 웹로그에서 가져온 곳
Entrydate="20000/12/25"
이러지 마세요. 이 SELECT 문은 올바른 레코드를 반환하지 않으며 2000년 12월 25일의 날짜와 시간만 반환합니다.
오전 12:00:00:000의 기록입니다. 즉, 정확히 자정에 입력된 레코드만 반환됩니다.
참고:
이 섹션의 논의에서는 필드 항목 날짜가 SMALLDATETIME이 아닌 DATETIME 유형이라고 가정합니다. 이 섹션의 논의는 SMALLDATETIME 유형 필드에도 적용 가능하지만 SMALLDATETIME 유형 필드는 초 단위까지만 정확할 수 있습니다.
문제는 SQL이다
서버는 부분적인 날짜와 시간을 완전한 날짜와 시간으로 바꿉니다. 예를 들어, 날짜만 입력하고 시간을 입력하지 않으면 SQL
서버는 기본 시간 "12:00:00:000AM"을 추가합니다. 시간만 입력하고 날짜를 입력하지 않으면 SQL Server에서는 기본 날짜 "1월 1일"을 추가합니다.
1900".
올바른 레코드를 반환하려면 날짜와 시간 범위를 적용해야 합니다. 이를 수행하는 방법은 여러 가지가 있습니다. 예를 들어 아래 SELECT
이 명령문은 올바른 기록을 반환합니다:
SELECT * FROM weblog
WHERE
입사일>=”2000년 12월 25일” AND
Entrydate<”12/26/2000”
이 문은 테이블에서 2000년 12월 25일보다 크거나 같은 날짜와 시간을 선택하므로 작업을 완료할 수 있습니다.
오전 12:00:00:000 및 2000년 12월 26일 미만
오전 12:00:00:000의 기록입니다. 즉, 2000년 크리스마스에 입력된 모든 레코드를 올바르게 반환합니다.
또는 LIKE를 사용하여 올바른 레코드를 반환할 수도 있습니다. 날짜 표현식에 와일드카드 문자 "%"를 포함하면 특정 날짜의 모든 시간을 일치시킬 수 있습니다. 예는 다음과 같습니다.
SELECT
* '12월 25일'과 같은 항목 날짜가 있는 웹로그에서
2000%’
이 진술은 올바른 기록과 일치할 수 있습니다. 와일드카드 "%"는 언제든지를 나타내기 때문입니다.
날짜와 시간 범위를 일치시키는 이 두 가지 기능을 사용하면 특정 월, 특정 날짜, 특정 연도, 특정 시간, 특정 분, 특정 초를 선택하거나 특정 기간 내에 입력할 수도 있습니다. 밀리초 기록. 하지만 LIKE를 사용하면
초 또는 밀리초를 일치시키려면 먼저 CONVERT() 함수를 사용하여 날짜와 시간을 보다 정확한 형식으로 변환해야 합니다(이전 섹션 "날짜 및 시간 변환" 참조).
날짜와 시간 비교
마지막으로 날짜와 시간을 기준으로 기록을 꺼내는데 유용한 날짜와 시간 함수가 2가지 있습니다. DATEADD() 및 DATEDIFF() 함수를 사용하면 이전 날짜와 이후 날짜를 비교할 수 있습니다. 예를 들어, 다음 SELECT 문은 테이블의 각 레코드가 입력된 시간을 표시합니다.
SELECT
Entrydate '입력 시간'
DATEDIFF(hh,entrydate,GETDATE()) '시간 전'
웹로그에서
현재 시간이 2000년 11월 30일 오후 6시 15분이면 다음 결과가 반환됩니다.
입력한 시간
몇 시간 전
………………………………………….
2000년 12월 30일 오후 4:09 2
12월 30
2000년 오후 4시 13분 2
2000년 12월 1일 오후 4시 9분 698
(3행)
영향을 받음)
DADEDIFF() 함수의 매개변수는 세 개의 변수입니다. 변수는 날짜의 일부를 지정합니다. 이 예에서는 날짜를 시간 단위로 비교합니다(날짜의 다양한 부분에 대한 자세한 내용은 표 11.2 참조). 2000년 11월 1일과 2000년 11월 30일의 지정된 시간 사이에는 689번이 있습니다. .시간. 다른 두 매개변수는 비교할 시간입니다. 양수를 반환하려면 더 이른 시간이 먼저 제공되어야 합니다.
DATEADD() 함수는 두 개의 날짜를 추가합니다. 이 기능은 마감일 등의 데이터를 계산해야 할 때 유용합니다. 예를 들어 방문자가 사이트를 사용하려면 먼저 등록해야 한다고 가정해 보겠습니다. 가입 후 한 달 동안 무료로 사이트를 사용할 수 있습니다. 여유 시간이 언제 소진되는지 확인하려면 다음 SELECT 문을 사용할 수 있습니다.
SELECT
사용자 이름 '사용자 이름',
DATEADD(mm,1,firstvisit_date) '등록
만료'
FROM
Registration_table
함수 DATEADD()의 매개변수에는 세 가지 변수가 있습니다. 첫 번째 변수는 날짜의 일부를 나타냅니다(표 11.2 참조). 이 예에서 mm은 월을 나타냅니다. 두 번째 변수는 시간 간격(이 경우 1개월)을 지정합니다. 마지막 변수는 날짜입니다. 이 예에서 날짜는 DATETIME 유형 필드 firstvisit_date에서 가져옵니다.
30,2000, 이 명령문은 다음 내용을 반환합니다:
사용자 이름 등록
만료
......................................................................................................................
빌 게이츠 2000년 7월 30일
오후 4시 9분
2000년 7월 30일 클린턴 대통령
오후 4:13
William Shakespeare 2000년 7월 1일 오후 4:09
(3행)
영향을 받음)
참고:
예상한 것과는 달리 DATEADD() 함수를 사용하여 날짜에 한 달을 추가해도 30일이 추가되지 않습니다. 이 함수는 단순히 월 값에 1을 더합니다. 즉, 11월에 가입한 사람은 2월에 가입한 사람보다 2~3일 더 많은 시간을 갖게 됩니다. 이 문제를 방지하려면 DATEADD() 함수를 사용하여 월 대신 일수를 직접 추가할 수 있습니다.
이메일 보내기
SQL을 사용할 수 있습니다.
서버는 간단한 e_mail 메시지를 보냅니다. 이렇게 하려면 시스템에 Microsoft Exchange와 같은 메일 서버가 설치되어 있어야 합니다.
서버(4장 "Exchange 활성 서버, 인덱스 서버 및 NetShow" 참조). 또한 SQL Server를 구성해야 합니다.
메일 서버를 식별합니다.
SQL Server가 메일 서버를 인식할 수 있도록 하려면 트랜잭션 관리자를 시작하고 메뉴에서 Sever|SQL을 선택하세요.
Mail|Configue를 선택하면 그림 11.3과 같은 대화 상자가 나타납니다. 메일 서버에 등록한 사용자 이름과 비밀번호를 입력하고 확인을 클릭하세요.
참고:
Microsoft를 사용하는 경우
Exchange Server와 SQL Server를 구성하는 프로세스는 크게 다릅니다. 동일한(도메인) 사용자 계정으로 Microsoft SQL을 실행해야 합니다.
서버 및 교환 서버. 또한 SQL Sever가 설치된 머신에 Exchange를 설치해야 합니다.
클릭하여 이 계정에 대한 구성 파일을 생성하세요. 이 작업을 완료한 후 SQL 메일을 사용할 수 있습니다.
구성 대화 상자에 구성 파일 이름을 입력합니다.
그림 11.3
이메일을 보내기 전에 SQL을 시작해야 합니다.
우편. 메뉴에서 Sever|SQL Mail|Start를 선택합니다. 메일 서버가 올바르게 구성되어 있고 올바른 사용자 이름과 비밀번호를 입력한 경우 SQL
메일이 성공적으로 시작됩니다.
참고:
이메일 서비스를 자동으로 시작하도록 SQL Server를 구성할 수 있습니다. 이렇게 하려면 Set Sever에서
옵션 대화 상자에서 메일 자동 시작을 선택합니다(메뉴에서 Sever|SQL Sever|Configure 선택).
그냥 클라이언트.
이메일을 보내려면 xp_sendmail이라는 확장 저장 프로시저를 사용할 수 있습니다. 다음은 이 프로세스를 사용하는 방법의 예입니다.
master..xp_sendmail
"president@whitehouse.gov","안녕하세요.
President"
이 절차 호출은 이메일 주소 President@whitehouse.gov로 간단한 이메일 메시지를 보냅니다. "안녕하세요.
씨.
President". 위 예의 해당 내용을 다른 이메일 주소 및 정보로 바꿀 수 있지만 보내는 정보의 길이는 255자를 초과할 수 없습니다.
언제든지 사이트 데이터베이스를 알고 싶을 때 예를 들어, xp_sendmail 저장 프로시저는 페이지 관리자에게 메시지를 보내는 데 유용합니다. 사이트에 문제가 있는 경우
요약
에서 저장 프로시저에 대해 자세히 알아볼 수 있습니다.
이 장에서는 쿼리 속도를 높이기 위해 인덱스를 만드는 방법과 테이블에 데이터를 삽입하고 삭제하는 방법, 집계 함수를 사용하여 데이터에 대한 통계 정보를 얻는 방법을 배웠습니다. 마지막으로 문자열, 날짜, 시간 및 이메일을 조작하기 위한 많은 유용한 표현식, 함수 및 절차를 배웠습니다.
다음 장에서는 Microsoft에 대한 이해를 더욱 깊게 할 것입니다.
SQL Server의 숙달. SQL을 사용하여 프로그래밍하는 방법과 저장 프로시저, 트리거 및 실행 계획을 만드는 방법을 배웁니다. 더욱 흥미로운 점은 SQL 사용 방법을 배울 수 있다는 것입니다.
Sever는 웹 페이지를 자동으로 생성하는 간단한 방법입니다.
위 내용은 SQL 데이터 연산 기초(중급) 10의 내용입니다. 더 많은 관련 글은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!