데이터베이스 의 SQL 기술 정리 사례
주어진 날짜 에 따라 이번 달의 일요일 일 수 를 계산한다.
시스템 변수@@DATEFIRST 의 값 에 따라 일요일 번 호 를[DatePart(WEEKDAY,RQ)=(07-@DateFirst)%7+1]로 판단 합 니 다.다음은 일요일,월요일...토요일 공식 입 니 다.
공식.
요일
(7-@@DateFirst)%7 +1
일요일
(7-@@DateFirst)%7 +2
월요일
(7-@@DateFirst)%7 +3
화요일
(7-@@DateFirst)%7 +4
수요일
(7-@@DateFirst)%7 +5
목요일
(7-@@DateFirst)%7 +6
금요일
(7-@@DateFirst)%7 +7
토요일
다음은 일요일 SQL 문 구 를 얻 는 것 입 니 다.SQL 문 구 는 포 함 된 순환 방식 으로 데 이 터 를 얻 습 니 다.
DECLARE @Day SmallDateTime
SET @Day = DateAdd(MM, DateDiff(MM,0,'2019-11-21'), 0)
;WITH Temp AS
( SELECT @Day AS RQ UNION ALL
SELECT RQ+1
FROM TEMP WHERE DateDiff(Month,RQ+1,@Day) = 0
)
SELECT
RN = Row_Number() Over(ORDER BY RQ),
RQ
FROM Temp WHERE DatePart(WEEKDAY,RQ)= (07-@@DateFirst) % 7 + 1
그 중:[DateAdd(MM,DateDiff(MM,0,'2019-08-21'),0)]이 달의 첫 날 을 얻 는 일반적인 방법 입 니 다.
실행 결 과 는 다음 과 같 습 니 다.
+---+---------------------+
|RN | RQ |
|---+---------------------|
| 1 | 2019-08-04 00:00:00 |
| 2 | 2019-08-11 00:00:00 |
| 3 | 2019-08-18 00:00:00 |
| 4 | 2019-08-25 00:00:00 |
+---+---------------------+
2.주어진 달의 모든 날 짜 를 얻 습 니 다.
그 중:
[DateDiff(Month,fDay+1,@RQ)=0]달 이 같다 고 판단 하 는 일반적인 방법 입 니 다.
DECLARE @RQ SMALLDATETIME
SET @RQ = '2019-09-01';
;WITH
tAppDays (fDay) AS
(
SELECT @RQ AS fDay
UNION ALL
SELECT fDay + 1 FROM tAppDays WHERE DateDiff(Month,fDay+1,@RQ) = 0
)
SELECT * FROM tAppDays ORDER BY fDAY
다음은 실행 결과 입 니 다.fDay
---------------------
2019-09-01 00:00:00
2019-09-02 00:00:00
2019-09-03 00:00:00
...
2019-09-23 00:00:00
2019-09-24 00:00:00
2019-09-25 00:00:00
2019-09-26 00:00:00
2019-09-27 00:00:00
2019-09-28 00:00:00
2019-09-29 00:00:00
2019-09-30 00:00:00
3.하위 문자열 목록 가 져 오기
재 귀 를 이용 하여 주어진 문자열 의 SPLIT 방법 을 얻 습 니 다.
-- SPLIT
DECLARE @CommentStr NVARCHAR(4000)=' | | | | | | | | | '
DECLARE @Split NVARCHAR(1)='|';
WITH Temp AS
( SELECT 1 AS Num UNION ALL
SELECT Num + 1
FROM TEMP WHERE Num<Len(@CommentStr) )
SELECT
RN = Row_Number() Over(ORDER BY Num),
SplitStr = SUBSTRING(@CommentStr,Num,CHARINDEX(@Split,@CommentStr+@Split,Num)-Num)
FROM Temp WHERE SUBSTRING(@Split+@CommentStr,Num,1) = @Split OPTION(MAXRECURSION 0);
다음은 실행 효과 입 니 다.RN SplitStr
------------------------
1 총지배인 실
2 판매 부
3 회계부
4 인사 부
5 노동 조합
6 후방 근무 부
7 생산 계획 부
8 동력 분공장
9 품질 검사 부
10 운수 부
------------------------
구분자 가 있 는 문자열 을 지정 하고 이 문 구 를 통 해 각 필드 의 목록 을 얻 습 니 다.
--================================================================================================
-- pAppGetSplit '|',' | | | | | | | '
================================================================================================
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'pAppGetSplit' AND type = 'P')
DROP PROCEDURE pAppGetSplit
GO
CREATE PROCEDURE pAppGetSplit
@Split VARCHAR(1),
@STR NVARCHAR(4000)
AS
;WITH Temp AS -- |
( SELECT 1 AS Num UNION ALL
SELECT Num + 1
FROM TEMP WHERE Num<Len(@STR) )
SELECT
RN = Row_Number() Over(ORDER BY Num),
SplitStr = SUBSTRING(@STR,Num,CHARINDEX(@Split,@STR+@Split,Num)-Num)
FROM Temp WHERE SUBSTRING(@Split+@STR,Num,1) = @Split OPTION(MAXRECURSION 0);
GO
다음은 실행 효과 입 니 다.+---+---------------------+
|RN | SplitStr |
|----+---------------------|
| 1 | 과목 명 |
| 2 | 주민등록번호 |
| 3 | 수강생 이름 |
| 4 | 코치 번호 |
| 5 | 코치 이름 |
| 6 | 훈련 횟수 |
| 7 | 횟수 를 합산 하 다 |
| 8 | 책임 비율 |
+---+---------------------+
4.이번 주 에 지 정 된 요일 의 날 짜 를 얻 습 니 다.
지 정 된 요일 에 따라 날 짜 를 얻 을 수 있 습 니 다.
--
DECLARE @Z SMALLINT
-- [1,2,3,4,5,6,7] [ , , , , , , ]
SET @Z=1
SELECT
GetDate() ,
DATEPART(Weekday,GetDate()) ,
(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7 ,
DATEADD(Day,@Z-(DATEPART(Weekday,GetDate()) + @@DATEFIRST-1)%7,GetDate())
데이터베이스 의 SQL 기술 정리 사례 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 SQL 기술 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.