반응형

MS-SQL에서 내부적으로 지원하는 문서화되지 않은 문자열 함수인 PWDENCRYPT와 PWDCOMPARE를 통해 암호화 기능을 구현할수 있다.

 

<사용예제>

 

' 테이블을 생성한다, 암호화할 컬럼은 VARBINARY 타입으로 한다. 

CREATE TABLE MEMBER
(
  UserId VARCHAR(25),
  UserPwd VARBINARY(100)
)

' 데이터를 입력한다. 암호화할 컬럼은 PWDENCRYPT메소드를 이용해서 넣는다.

INSERT INTO MEMBER (UserId, UserPwd)

       VALUES ('smith', PWDENCRYPT('1234')) 

 

' 해당아이디를 가진 회원의 암호화된 비밀번호 컬럼과 입력한 문자열 비밀번호를

' PWDCOMPARE(입력문자열, 컬럼명) 메소드를 이용해 비교한다.

' 둘이 같으면 1 (true), 틀리면 0 (false)를 리턴하게 된다.

' 그리고 원문이나 암호문 둘 중 하나가 NULL 이면 NULL을 리턴하게 된다.

SELECT PWDCOMPARE('1234', UserPwd)

       FROM MEMBER WHERE UserId='smith'  ' 결과 : 1

 

결과를 살펴보면 대소문자는 구분하지 않음을 알 수 있다. 암호문의 경우 위에서 살펴본대로 대소문자를 분명 다르게 비교하였으나, PWDCOMPARE 함수에서는 대소문자를 무시하였다.

또한, 실행 결과를 보면 형태는 원문의 길이에 상관없이 30~35자 사이의 거의 일정한 길이의 암호문을 출력하는 것을 볼 수 있다.  테스트 결과 원문의 길이가 varchar 기준으로 128자를 넘었을 경우 에러를 발생 하였다.

반응형
반응형

구문

JSON_MODIFY ( expression , path , newValue )  

기본 쿼리


DECLARE @info NVARCHAR(100)='{"name":"John","skills":["C#","SQL"]}'

PRINT @info

-- Update name  

SET @info=JSON_MODIFY(@info,'$.name','Mike')

PRINT @info

-- Insert surname  

SET @info=JSON_MODIFY(@info,'$.surname','Smith')

PRINT @info

-- Set name NULL 

SET @info=JSON_MODIFY(@info,'strict $.name',NULL)

PRINT @info

-- Delete name  

SET @info=JSON_MODIFY(@info,'$.name',NULL)

PRINT @info

-- Add skill  

SET @info=JSON_MODIFY(@info,'append $.skills','Azure')

PRINT @info

결과

{
    "name": "John",
    "skills": ["C#", "SQL"]
} {
    "name": "Mike",
    "skills": ["C#", "SQL"]
} {
    "name": "Mike",
    "skills": ["C#", "SQL"],
    "surname": "Smith"
} {
    "skills": ["C#", "SQL"],
    "surname": "Smith"
} {
    "skills": ["C#", "SQL", "Azure"],
    "surname": "Smith"
}

 

https://docs.microsoft.com/ko-kr/sql/t-sql/functions/json-modify-transact-sql?view=sql-server-ver15 

 

 

JSON_MODIFY(Transact-SQL) - SQL Server

JSON_MODIFY(Transact-SQL)

docs.microsoft.com

 

반응형
반응형

[MSSQL] 특정 기간에 해당하는 모든 날짜 (MASTER..SPT_VALUES) 

 

 

SELECT CONVERT(VARCHAR, DATEADD(D, NUMBER, '20170213'), 112) AS 'DATE' 
FROM MASTER..SPT_VALUES 
WHERE TYPE = 'P' AND NUMBER <= DATEDIFF(D, '20170213', '20170730')
반응형
반응형

Adding string to DATEDIFF(day,getdate(),enddate) as DayRemain how please?

 

select 'Days remain ' + convert(varchar(20),(DATEDIFF(day,getdate(),'29 Oct 2011 12:00:00'))) as 'Days Remain'

the output of above query will be 

| Days Remain     |

| Days remain 30 |

반응형
반응형

▶ 데이터 타입

SQL Server PostgreSQL
BIGINT 64-bit integer BIGINT
BINARY(n) Fixed-length byte string BYTEA
BIT 1, 0 or NULL BOOLEAN
CHAR(n), CHARACTER(n) Fixed-length character string, 1 ⇐ n ⇐ 8000 CHAR(n), CHARACTER(n)
DATE Date (year, month and day) DATE
DATETIME Date and time with fraction TIMESTAMP(3)
DATETIME2(p) Date and time with fraction TIMESTAMP(p)
DATETIMEOFFSET(p) Date and time with fraction and time zone TIMESTAMP(p) WITH TIME ZONE
DECIMAL(p,s), DEC(p,s) Fixed-point number DECIMAL(p,s), DEC(p,s)
DOUBLE PRECISION Double-precision floating-point number DOUBLE PRECISION
FLOAT(p) Floating-point number DOUBLE PRECISION
IMAGE Variable-length binary data, ⇐ 2G BYTEA
INT, INTEGER 32-bit integer INT, INTEGER
MONEY 64-bit currency amount MONEY
NCHAR(n) Fixed-length Unicode UCS-2 string CHAR(n)
NTEXT Variable-length Unicode UCS-2 data, ⇐ 2G TEXT
NUMERIC(p,s) Fixed-point number NUMERIC(p,s)
NVARCHAR(n) Variable-length Unicode UCS-2 string VARCHAR(n)
NVARCHAR(max) Variable-length Unicode UCS-2 data, ⇐ 2G TEXT
REAL Single-precision floating-point number REAL
ROWVERSION Automatically updated binary data BYTEA
SMALLDATETIME Date and time TIMESTAMP(0)
SMALLINT 16-bit integer SMALLINT
SMALLMONEY 32-bit currency amount MONEY
TEXT Variable-length character data, ⇐ 2G TEXT
TIME(p) Time (hour, minute, second and fraction) TIME(p)
TIMESTAMP Automatically updated binary data BYTEA
TINYINT 8-bit unsigned integer, 0 to 255 SMALLINT
UNIQUEIDENTIFIER 16-byte GUID (UUID) data CHAR(16)
VARBINARY(n) Variable-length byte string, 1 ⇐ n ⇐ 8000 BYTEA
VARBINARY(max) Variable-length binary data, ⇐ 2G BYTEA
VARCHAR(n) Variable-length character string, 1 ⇐ n ⇐ 8000 VARCHAR(n)
VARCHAR(max) Variable-length character data, ⇐ 2G TEXT
XML XML data XML

▶ 함수

SQL Server PostgreSQL
DATEADD Add an interval to datetime INTERVAL expression
ISNULL(exp, replacement) Replace NULL with the specified value COALESCE(exp, replacement)



출처: https://icodebroker.tistory.com/6429 [ICODEBROKER]

 

반응형
반응형

[MSSQL] 트랜잭션 로그가 꽉 차서 해결할때. 로그 축소

 

DB서버가 용량 부족이라서 확인해보니 로그파일이 37기가!!!

 

바로 트랜잭션 축소 해버림. 

DBCC SHRINKFILE   
(  
    { file_name | file_id }   
    { [ , EMPTYFILE ]   
    | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]  
    }  
)  
[ WITH NO_INFOMSGS ]  



--https://docs.microsoft.com/ko-kr/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-ver15
-- DB log 축소 
 
USE [DataBase];

ALTER DATABASE [DataBase] SET RECOVERY SIMPLE;

-- 로그파일을 10MB로 축소

DBCC SHRINKFILE ([DataBase_Log], 10);

ALTER DATABASE [DataBase] 
SET RECOVERY FULL;
-- 로그 파일을 지정한 대상 크기로 축소

USE AdventureWorks2012;  
GO  

-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE AdventureWorks2012  
SET RECOVERY SIMPLE;  
GO  

-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);  
GO  

-- Reset the database recovery model.  
ALTER DATABASE AdventureWorks2012  
SET RECOVERY FULL;  
GO  

 

https://docs.microsoft.com/ko-kr/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-ver15 

 

DBCC SHRINKFILE(Transact-SQL) - SQL Server

DBCC SHRINKFILE(Transact-SQL)

docs.microsoft.com

 

반응형
반응형

 

CROSS APPLY 와 INNER JOIN

CROSS APPLY 와 INNER JOIN 은 동일한 의미를 지니게 됩니다.

아래 3개의 쿼리를 실행하고 나온 결과값을 확인해 보겠습니다.

SELECT * FROM FIRST_TABLE FT CROSS APPLY APPLY_FUNCTION(FT.C1)


SELECT * FROM FIRST_TABLE FT CROSS APPLY ( SELECT * FROM SECOND_TABLE ST WHERE ST.C1 = FT.C1 ) ST
 

SELECT * FROM FIRST_TABLE FT INNER JOIN SECOND_TABLE ST ON ST.C1 = FT.C1



OUTER APPLY 와 LEFT OUTER JOIN

OUTER APPLY 와 LEFT OUTER JOIN 역시 동일한 의미를 지니게 됩니다.

SELECT * FROM FIRST_TABLE FT OUTER APPLY APPLY_FUNCTION(FT.C1)



SELECT * FROM FIRST_TABLE FT OUTER APPLY ( SELECT * FROM SECOND_TABLE ST WHERE ST.C1 = FT.C1 ) ST



SELECT * FROM FIRST_TABLE FT LEFT OUTER JOIN SECOND_TABLE ST ON ST.C1 = FT.C1

반응형
반응형

update select 로 json data 변경하기

 

json_value, json_modify

-- update select 로 json data 변경하기 

 UPDATE AA  SET 
        AA.컬럼1 = JSON_MODIFY(BB.컬럼1,'$.must.title_inner',JSON_VALUE(BB.컬럼1, '$.must.title'))  
   from Table01 AS AA, Table01 AS BB 
  where BB.key = AA.KEY 
    

위 update문 옆에는 Alias로 배치하고 나머지 쿼리를 해보면 된다. 

 

일단 update 전에 select로 데이터 테스트는 필수!!!

 

잘못하면 훅! 간다~ 

반응형

+ Recent posts