속도는 느리지만, 가끔 필요한 소스이다.

다른 방법이 있으면 알려주세요!!

CASE @TestVal
WHEN 1 THEN

            CASE @TestVal2
            WHEN 1 THEN 'First'
            ELSE
@TestVal2 END

WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
ELSE 'Other'
END


일을 하다보니, 가끔 내부적으로 특정 데이터만 다시 뽑길 원해서 사용한다..ㅠㅠ

야매인듯..


CASE expressions can be used in SQL anywhere an expression can be used. Example of where CASE expressions can be used include in the SELECT list, WHERE clauses, HAVING clauses, IN lists, DELETE and UPDATE statements, and inside of built-in functions.

Two basic formulations for CASE expression
1) Simple CASE expressions
A simple CASE expression checks one expression against multiple values. Within a SELECT statement, a simple CASE expression allows only an equality check; no other comparisons are made. A simple CASE expression operates by comparing the first expression to the expression in each WHEN clause for equivalency. If these expressions are equivalent, the expression in the THEN clause will be returned.

Syntax:
CASE expression
WHEN expression1 THEN expression1
[[WHEN expression2 THEN expression2] [...]]
[ELSE expressionN]
END

Example:
DECLARE @TestVal INT
SET
@TestVal = 3
SELECT
CASE @TestVal
WHEN 1 THEN 'First'
WHEN 2 THEN 'Second'
WHEN 3 THEN 'Third'
ELSE 'Other'
END


2) Searched CASE expressions

A searched CASE expression allows comparison operators, and the use of AND and/or OR between each Boolean expression. The simple CASE expression checks only for equivalent values and can not contain Boolean expressions. The basic syntax for a searched CASE expressions is shown below:

Syntax:
CASE
WHEN Boolean_expression1 THEN expression1
[[WHEN Boolean_expression2 THEN expression2] [...]]
[ELSE expressionN]
END

Example:
DECLARE @TestVal INT
SET
@TestVal = 5
SELECT
CASE
WHEN @TestVal <=3 THEN 'Top 3'
ELSE 'Other'
END

Reference : Pinal Dave (http://blog.SQLAuthority.com)

Posted by 노을지기

날짜형을 문자형으로 변경하는 방법은 많이 있었다.

하지만, 숫자형을 날짜형으로 변환하는 방법이 없어서 인터넷을 검색하였다.


숫자형을 날짜형식으로

출처: http://forums.devshed.com/ms-sql-development-95/converting-int-to-date-431988.html

you can't convert an int directly into a date - first you have to convert it to a string and then to a date
e.g. convert(datetime,convert(char(8),20070320),112)

이렇게 할 경우 Left, Mid, Right 함수를 사용하지 않아도 된다는 장점이 있었다.

또한 다음도 지원이 된다.

e.g. convert(date,convert(char(8),20070320),112)

시간이 필요없을 경우..


날짜형을 문자형으로

출처: http://joonsunny.springnote.com/pages/427560

convert() : 검색시 날짜형을 문자형, 문자형을 날짜형, 숫자를 문자형등으로 고쳐

              표현하는 경우 사용.

형식 : CONVERT(바뀔자료형[길이], 바꿀자료원본, 유형)

EX) 날짜(년-월-일) -> 문자열(VARCHAR) 로 변경

      CONVERT(VARCHAR(20), RDATE, 101)

 CAST() : CONVERT함수와 같은 역할

형식 : CAST(바꿀데이터 AS 바뀔자료형)

EX) 숫자를 문자로 변경

      CAST(123 AS CHAR(10))

     문자를 정수로 변경

     CAST('123' AS INT)

Posted by 노을지기

출처: http://blog.sqlauthority.com/2007/07/07/sql-server-convert-text-to-numbers-integer-cast-and-convert/

Thank you, --

-----------------------

SQL SERVER – Convert Text to Numbers (Integer) – CAST and CONVERT

Few of the questions I receive very frequently. I have collect them in spreadsheet and try to answer them frequently.

How to convert text to integer in SQL?
If table column is VARCHAR and has all the numeric values in it, it can be retrieved as Integer using CAST or CONVERT function.

How to use CAST or CONVERT?
SELECT CAST(YourVarcharCol AS INT) FROM Table
SELECT CONVERT(INT, YourVarcharCol) FROM Table

Will CAST or CONVERT thrown an error when column values converted from alpha-numeric characters to numeric?
YES.

Will CAST or CONVERT retrieve only numbers when column values converted from alpha-numeric characters to numeric?
NO.

How to parse/retrieve only numbers from column values contains alpha-numeric characters?
SQL SERVER – UDF – Function to Parse AlphaNumeric Characters from String

What are the online references for CAST and CONVERT?
CAST and CONVERT

Reference : Pinal Dave (http://blog.SQLAuthority.com)

Posted by 노을지기

출처: http://zzznara2.tistory.com/71

Join 문제로 고민하다가 찾게 되었다.

하지만 mssql이나 mysql에서 작동하는지는 확인하지 못했지만, 매우 유용한 정보이다.

현재 C#에서 바로 mssql의 빌더를 이용하여 사용하지만, 속도 문제가..ㅡㅡ;;

좀 더 공부한 뒤에 익숙해져야겠다.

---------------------------------------------------------

MSSQL문의 저장프로시저를 분석해서 자바 배치를 만드는 작업을 하던 중에.. 막히는 부분이 있었다.
MSSQL의 저장프로시저에는 무조건 쿼리를 만들어 임시테이블에 넣고,
그 임시테이블을 가지고 이것저것 조건을 건 다음에 다시 다른 임시테이블에 넣는 작업이 반복되고 있었다.

며칠을 고민한 끝에 오라클의 WITH문을 발견하고 '만세~!'를 불렀다. ㅋ
WITH문을 사용하면 자유자재로 쿼리를 뷰처럼 재사용할 수 있었기 때문이다.

WITH viewData AS
(
    SELECT
*
       FROM TestTable_1
)
SELECT
*
   FROM viewData
;

이건 WITH 문의 기본 문장이다.
WITH name AS ( 쿼리 )

 

그런데, WITH문에 다중 쿼리를 사용하면 그 위력이 엄청나게 된다.

WITH viewData1 AS
(
    SELECT
*
       FROM TestTable_1
),
WITH viewData2 AS
(
    SELECT *
        FROM TestTable_2
)
SELECT
V1.id,
             V2.name,
             V2.address
   FROM viewData1 V1,
             viewData2 V2
 WHERE V1.id = V2.id
     AND V1.name LIKE '최%'
;

이런 정도의 쿼리라면 굳이 WITH문을 사용할 필요가 있을까?
다음 쿼리를 보자.

WITH viewData1 AS
(
    SELECT
*
       FROM TestTable_1
),
WITH viewData2 AS 
(
    SELECT *
        FROM TestTable_2
),
WITH viewData3 AS
(
    SELECT
V1.id,
                 V2.name,
                 V2.address
       FROM viewData1 V1,
                 viewData2 V2
     WHERE V1.id = V2.id
         AND V1.name LIKE '최%'
)
SELECT *
   FROM viewData3
 WHERE ROWNUM <= 100
;

이런식으로.. 위에서 정의한 viewData1, viewData2를 아래 WITH문에서 호출해서 사용할 수 있다.
갯수는 계속 추가해서 사용할 수 있으니 WITH문으로 임시테이블이나 View처럼 사용할 수 있어 좋다.

Posted by 노을지기
이전버튼 1 2 이전버튼