사용자 도구

사이트 도구


mssqlserver:basic

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
마지막 판 양쪽 다음 판
mssqlserver:basic [2018/10/30 17:01]
kwon37xi [UPSERT]
mssqlserver:basic [2020/08/24 17:16]
kwon37xi [String to DATETIME]
줄 80: 줄 80:
 -- TEST 가 UPDATE/INSERT 대상 테이블일 때 -- TEST 가 UPDATE/INSERT 대상 테이블일 때
 MERGE dbo.TEST AS T MERGE dbo.TEST AS T
 +USING (SELECT 3, 300) AS S (userSN, col1) -- update or insert 할 데이터 테이블. SELECT로 가상 테이블 만듬
 +ON T.userSN = S.userSN
 +WHEN MATCHED THEN
 +       UPDATE SET col1 = S.col1
 +WHEN NOT MATCHED BY TARGET THEN
 +       INSERT (userSN, col1) VALUES (S.userSN, S.col1);
 +</code>
  
-USING (SELECT 3, 300) AS S (userSN, col1)+===== Offset/Limit Paging ===== 
 +  * [[https://blog.sqlauthority.com/2013/12/30/sql-server-mysql-limit-and-offset-skip-and-return-only-next-few-rows-paging-solution/|SQL SERVER - MySQL - LIMIT and OFFSET - Skip and Return Only Next Few Rows - Paging Solution - SQL Authority with Pinal Dave]] SQLServer 2012 부터 추가된 Offset/limit 
 +  * [[https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017|ORDER BY Clause (Transact-SQL) | Microsoft Docs]] 
 +  * ''OFFSET'' 은 **''0''** 부터 시작한다. 
 +<code sql> 
 +SELECT 
 +FROM Sales.SalesOrderDetail 
 +ORDER BY SalesOrderDetailID 
 +OFFSET 20 ROWS 
 +FETCH NEXT 10 ROWS ONLY; 
 +GO 
 +</code>
  
-ON T.userSN S.userSN+===== DATE, TIME 컬럼 합쳐서 DATETIME 만들기 ===== 
 +  * ''DATE''와 ''TIME'' 컬럼이 따로 존재할 경우 이 둘을 합쳐서 ''DATETIME''을 만들려면, [[https://stackoverflow.com/questions/700619/how-to-combine-date-from-one-field-with-time-from-another-field-ms-sql-server|How to combine date from one field with time from another field - MS SQL Server]]
  
-WHEN MATCHED THEN+<code sql> 
 +-- modifyDate : DATE, modifyTime : TIME 컬럼일 경우 
 +CAST(modifyDate as DATETIME) + CAST(modifyTime as DATETIME) modifiedAt 
 +</code>
  
-       UPDATE SET col1 S.col1+===== 공백제거 ===== 
 +  * [[https://stackoverflow.com/questions/951518/replace-a-newline-in-tsql|Replace a newline in TSQL - Stack Overflow]] 
 +  * ''CR'', ''LF'',, ''CRLF'' 모두 제거해야 한다. 
 +<code sql> 
 +SELECT REPLACE(REPLACE(@str, CHAR(13), ''), CHAR(10), ''
 +</code>
  
-WHEN NOT MATCHED BY TARGET THEN+===== FORMAT ===== 
 +  * [[https://docs.microsoft.com/ko-kr/sql/t-sql/functions/format-transact-sql?view=sql-server-2017|FORMAT(Transact-SQL) | Microsoft Docs]] 
 +  * 시간 포맷시 ''.'' 혹은 '':'' 을 사용하려면 ''\.'' ''\:'' 형태로 Escape하지 않으면 null 리턴된다. 
 +  * 시간을 나타내는 포맷 문자열은 ''hh''이다. *대문자 아님*. 
 +<code sql> 
 +SELECT FORMAT(cast('07:35' as time), N'hh\.mm');  --> returns 07.35   
 +SELECT FORMAT(cast('07:35' as time), N'hh\:mm');  --> returns 07:35   
 +</code>
  
-       INSERT (userSNcol1VALUES (S.userSNS.col1);+===== String to DATETIME ===== 
 +  * 정형화 돼 있는 날짜형식 문자열을 DATETIME 타입으로 변경하는 것은 ''CAST''를 사용한다.  
 +  * [[https://docs.microsoft.com/ko-kr/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15|CAST 및 CONVERT]] 
 +  * 그렇지 못한 custom type 은 문자열을 모두 쪼개서 [[https://docs.microsoft.com/en-us/sql/t-sql/functions/datetimefromparts-transact-sql?view=sql-server-ver15|DATETIMEFROMPARTS]]/[[https://docs.microsoft.com/en-us/sql/t-sql/functions/datetime2fromparts-transact-sql?view=sql-server-ver15|DATETIME2FROMPARTS]]를 사용한다. 
 +  * [[https://rextester.com/LTBUB91960|임의의 문자열을 DATETIME, DATETIME2 로 변경하기, Sql Server - rextester]] 
 +<code sh> 
 +-- 2019-09-20 18:51:47 
 +DECLARE @d NVARCHAR(14)='20170920185147'; 
 +  
 +SELECT DATETIMEFROMPARTS (LEFT(@d4),  SUBSTRING(@d5,2), SUBSTRING(@d,7 ,2), SUBSTRING(@d, 9, 2) , SUBSTRING(@d, 11, 2), RIGHT(@d, 2), 0) as "with_var", 
 +DATETIMEFROMPARTS (LEFT('20170920185147', 4),  SUBSTRING('20170920185147', 5,2), SUBSTRING('20170920185147',7 ,2), SUBSTRING('20170920185147', 9, 2) , SUBSTRING('20170920185147', 11, 2), RIGHT('20170920185147', 2), 0) as "with_literal", 
 +DATETIME2FROMPARTS (LEFT('20170920185147', 4),  SUBSTRING('20170920185147', 5,2), SUBSTRING('20170920185147',7 ,2), SUBSTRING('20170920185147', 9, 2) , SUBSTRING('20170920185147', 11, 2), RIGHT('20170920185147', 2), 0, 0as "dt2" 
 +;
 </code> </code>
 +
mssqlserver/basic.txt · 마지막으로 수정됨: 2020/08/24 17:16 저자 kwon37xi