스칼라 함수 사용

완료됨

스칼라 함수는 단일 값을 반환하며 일반적으로 단일 데이터 행에서 작동합니다. 사용되는 입력 값의 수는 0(예: GETDATE), 1(예: UPPER) 또는 복수(예: ROUND)일 수 있습니다. 스칼라 함수는 항상 단일 값을 반환하므로 단일 값(결과)이 필요한 모든 위치에서 사용될 수 있습니다. SELECT 절 및 WHERE 절 조건자에서 가장 일반적으로 사용됩니다. UPDATE 문의 SET 절에서도 사용될 수 있습니다.

기본 제공 스칼라 함수는 문자열, 변환, 논리, 수학 등 다양한 범주로 구성될 수 있습니다. 이 모듈에서는 몇 가지 일반적인 스칼라 함수를 살펴봅니다.

스칼라 함수를 사용할 때 고려해야 할 사항은 다음과 같습니다.

  • 결정성: 함수가 호출될 때마다 동일한 입력 및 데이터베이스 상태에 대해 동일한 값을 반환하는 경우 ‘결정적’이라고 합니다. 예를 들어 ROUND(1.1, 0)는 항상 값 1.0을 반환합니다. 대부분의 기본 제공 함수는 ‘비결정적’입니다. 예를 들어 GETDATE()는 현재 날짜 및 시간을 반환합니다. 비결정적 함수의 결과는 인덱싱할 수 없으므로 쿼리를 실행하는 데 적합한 계획을 세울 수 있는 쿼리 프로세서의 기능에 영향을 미칩니다.
  • 데이터 정렬: 문자 데이터를 조작하는 함수를 사용하는 경우 어떤 데이터 정렬을 사용합니까? 일부 함수는 입력 값의 데이터 정렬(정렬 순서)을 사용합니다. 입력 데이터 정렬이 제공되지 않은 경우에는 데이터베이스의 데이터 정렬을 사용합니다.

스칼라 함수 예제

이 문서를 작성할 당시 SQL Server 기술 문서에는 다음을 포함하여 여러 범주에 걸쳐 있는 200개 이상의 스칼라 함수가 나열되었습니다.

  • 구성 함수
  • 변환 함수
  • 커서 함수
  • 날짜 및 시간 함수
  • 수학 함수
  • 메타데이터 함수
  • 보안 함수
  • 문자열 함수
  • 시스템 함수
  • 시스템 통계 함수
  • 텍스트 및 이미지 함수

이 과정에서는 각 함수를 설명하는 데 충분한 시간이 없지만 아래 예제에서는 일반적으로 사용되는 몇 가지 함수를 보여 줍니다.

다음 가상 예제에서는 여러 날짜 및 시간 함수를 사용합니다.

SELECT  SalesOrderID,
    OrderDate,
        YEAR(OrderDate) AS OrderYear,
        DATENAME(mm, OrderDate) AS OrderMonth,
        DAY(OrderDate) AS OrderDay,
        DATENAME(dw, OrderDate) AS OrderWeekDay,
        DATEDIFF(yy,OrderDate, GETDATE()) AS YearsSinceOrder
FROM Sales.SalesOrderHeader;

결과의 일부가 아래에 나와 있습니다.

SalesOrderID

OrderDate

OrderYear

OrderMonth

OrderDay

OrderWeekDay

YearsSinceOrder

71774

2008-06-01T00:00:00

2008

6월

1

일요일

13

...

...

...

...

...

...

...

다음 예제에는 몇 가지 수학 함수가 포함되어 있습니다.

SELECT TaxAmt,
       ROUND(TaxAmt, 0) AS Rounded,
       FLOOR(TaxAmt) AS Floor,
       CEILING(TaxAmt) AS Ceiling,
       SQUARE(TaxAmt) AS Squared,
       SQRT(TaxAmt) AS Root,
       LOG(TaxAmt) AS Log,
       TaxAmt * RAND() AS Randomized
FROM Sales.SalesOrderHeader;

일부 결과:

TaxAmt

Rounded

Floor

Ceiling

Squared

Root

로그

임의

70.4279

70.0000

70.0000

71.0000

4960.089098

8.392133221

4.254589491

28.64120429

...

..

...

...

...

...

...

...

다음 예에서는 몇 가지 문자열 함수를 사용합니다.

SELECT  CompanyName,
        UPPER(CompanyName) AS UpperCase,
        LOWER(CompanyName) AS LowerCase,
        LEN(CompanyName) AS Length,
        REVERSE(CompanyName) AS Reversed,
        CHARINDEX(' ', CompanyName) AS FirstSpace,
        LEFT(CompanyName, CHARINDEX(' ', CompanyName)) AS FirstWord,
        SUBSTRING(CompanyName, CHARINDEX(' ', CompanyName) + 1, LEN(CompanyName)) AS RestOfName
FROM Sales.Customer;

일부 결과:

CompanyName

UpperCase

LowerCase

길이

Reversed

FirstSpace

FirstWord

RestOfName

자전거 매장

A BIKE STORE

a bike store

12

erotS ekiB A

2

A

Bike Store

Progressive Sports

PROGRESSIVE SPORTS

progressive sports

18

stropS evissergorP

12

프로그레시브

스포츠

Advanced Bike Components

ADVANCED BIKE COMPONENTS

advanced bike components

24

stnenopmoC ekiB decnavdA

9

고급

Bike Components

...

...

...

...

...

...

...

...

논리 함수

다른 범주의 함수를 사용하면 몇 가지 값 중 어떤 값이 반환될지 확인할 수 있습니다. 논리 함수는 입력 식을 계산하고 결과에 따라 적절한 값을 반환합니다.

IIF

IIF 함수는 부울 입력 식을 계산하여 식이 True로 계산되면 지정된 값을 반환하고 식이 False로 계산되면 대체 값을 반환합니다.

예를 들어 고객의 주소 유형을 계산하는 다음 쿼리를 살펴보겠습니다. 값이 “Main Office”이면 식은 “Billing”을 반환합니다. 다른 모든 주소 유형 값에 대해서는 식이 “Mailing”을 반환합니다.

SELECT AddressType,
      IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;

이 쿼리의 결과 중 일부는 다음과 같습니다.

AddressType

UseAddressFor

Main Office

결제

발송

Mailing

...

...

CHOOSE

CHOOSE 함수는 정수 식을 계산하고 (1부터 시작하는) 서수 위치에 따라 해당하는 값을 목록에서 반환합니다.

SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;

이 쿼리의 결과는 다음과 같을 수 있습니다.

SalesOrderID

상태

OrderStatus

1234

3

배달됨

1235

2

Shipped

1236

2

Shipped

1237

1

주문됨

...

...

...