>php教程 >PHP开发 >SQL Cast 및 변환 사용법에 대한 자세한 설명

SQL Cast 및 변환 사용법에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-12-14 13:26:441948검색

sql 캐스트 및 변환 사용법에 대한 자세한 설명

요약:

다음은 mysql에만 적용됩니다

SELECT {fn CONCAT(CONVERT( user_id ,CHAR),USER_NAME)} AS str FROM t_sys_user

다음은 sqlserver2008에만 적용됩니다.

SELECT {fn CONCAT(CONVERT(CHAR, user_id),USER_NAME)} AS str FROM t_sys_user

다음 sqlserver는 mysql과 호환됩니다

SELECT {fn CONCAT(CAST(user_id AS CHAR),USER_NAME)} AS str FROM t_sys_user

설명: Cast는 sqlserver 및 mysql에 공통되는 유형 변환 함수입니다.

Convert도 유형 변환으로 sqlserver2008과 mysql 모두에 존재하지만 매개변수의 순서가 반대입니다.

concat 함수는 sqlserver2008과 mysql 모두에서 사용 가능하지만 sqlserver2008에서는 {fn concat(arg0,arg1,...)}처럼 적용해야 하며 int형과 varchar로 연결하기에는 적합하지 않다. 유형. sqlserver2008에서 문자열 연결은 일반적으로 "+" 기호를 사용합니다. 하지만 sqlserver2012에서는 concat 함수를 직접 사용할 수 있는 기능이 지원되는 것 같습니다.

mysql을 변환할 수 있는 유형 제한:

은 CAST(xxx AS 유형), CONVERT(xxx, 유형)입니다.

변환할 수 있는 종류가 제한되어 있습니다. 이 유형은 다음 값 중 하나일 수 있습니다.

바이너리(바이너리 접두사의 효과 포함): BINARY

문자 유형, 매개변수를 사용할 수 있습니다: CHAR()

날짜: DATE

시간: TIME

날짜 시간 유형: DATETIME

부동 소수점 수: DECIMAL

정수: SIGNED

부호 없는 정수: UNSIGNED

다음 부분은 그대로 재현하였으며, 위 부분은 제가 직접 요약한 것입니다.

sqlserver

한 데이터 유형의 표현식을 다른 데이터 유형으로 명시적으로 변환합니다. CAST와 CONVERT는 유사한 기능을 제공합니다.

구문

CAST 사용:

CAST(표현식 AS data_type)

CONVERT 사용:

CONVERT(data_type[(length) ], 식 [, 스타일])

parameter

expression

은 유효한 Microsoft® SQL Server™ 식입니다. 자세한 내용은 표현식을 참조하세요.

data_type

bigint 및 sql_variant를 포함하여 대상 시스템에서 제공하는 데이터 유형입니다. 사용자 정의 데이터 유형은 사용할 수 없습니다. 사용 가능한 데이터 유형에 대한 자세한 내용은 데이터 유형을 참조하세요.

length

nchar, nvarchar, char, varchar, 바이너리 또는 varbinary 데이터 유형에 대한 선택적 인수입니다.

스타일

datetime 또는 smalldatetime 데이터를 문자 데이터(nchar, nvarchar, char, varchar, nchar 또는 nvarchar 데이터 유형) 또는 문자열 형식 스타일로 변환하는 데 사용되는 날짜 형식 스타일입니다. , float, real, Money 또는 smallmoney 데이터를 문자 데이터(nchar, nvarchar, char, varchar, nchar 또는 nvarchar 데이터 형식)로 변환하는 데 사용됩니다.

SQL Server는 쿠웨이트 알고리즘을 사용하여 아랍어 스타일의 데이터 형식을 지원합니다.

표에서 왼쪽 두 열은 datetime 또는 smalldatetime을 문자 데이터로 변환하는 스타일 값을 나타냅니다. 세기 자리를 포함한 4자리 연도(yyyy)를 얻으려면 스타일 값에 100을 더합니다.

세기 숫자 없음(yy) 세기 숫자 있음(yyyy)

표준

입력/출력**

- 0 또는 100(*) 기본값 값 mon dd yyyy hh:miAM(또는 PM)

1 101 US mm/dd/yyyy

2 102 ANSI yy.mm.dd

3 103 영국/프랑스 dd/mm/yy

4 104 독일 dd.mm.yy

5 105 이탈리아 dd-mm-yy

6 106 - dd mon yy

7 107 - mon dd, yy

8 108 - hh:mm:ss

- 9 또는 109(*) 기본값 + 밀리초 mon dd yyyy hh:mi:ss:mmmAM(또는 PM)

10 110 미국 mm-dd-yy

11 111 일본 yy/mm/dd

12 112 ISO yymmdd

- 13 또는 113 (*) 유럽 기본값 + 밀리초 dd mon yyyy hh:mm:ss:mmm(24h)

14 114 - hh:mi:ss:mmm(24h)

- 20 또는 120 ( *) ODBC 사양 yyyy-mm-dd hh:mm:ss[.fff]

- 21 또는 121 (*) ODBC 사양(밀리초 단위) yyyy-mm-dd hh:mm:ss [.fff ]

- 126(***) ISO8601 yyyy-mm-dd Thh:mm:ss:mmm (공백 없이)

- 130* Kuwait dd mon yyyy hh: mi:ss: mmmAM

- 131* 쿠웨이트

기본값(스타일 0 또는 100, 9 또는 109, 13 또는 113, 20 또는 120, 21 또는 121)은 항상 세기 숫자(yyyy)를 반환합니다.

** 날짜/시간으로 변환 시 입력, 문자 데이터로 변환 시 출력.

*** 특별히 XML용입니다. datetime 또는 smalldatetime을 문자 데이터로 변환하는 경우 출력 형식은 표에 표시된 것과 같습니다. float, Money 또는 smallmoney를 문자 데이터로 변환하는 경우 출력은 스타일 2와 동일합니다. 실제 데이터를 문자 데이터로 변환하는 경우 출력은 스타일 1과 동일합니다.

중요 기본적으로 SQL Server는 구분 연도인 2049년을 기준으로 두 자리 연도를 해석합니다. 즉, 두 자리 연도 49는 2049년으로 해석되고, 두 자리 연도 50은 1950년으로 해석됩니다. OLE 자동화 개체 기반 응용 프로그램과 같은 많은 클라이언트 응용 프로그램은 2030년을 기준 연도로 사용합니다. SQL Server는 SQL Server에서 사용하는 마감 연도를 변경하고 날짜를 일관되게 처리할 수 있는 구성 옵션("두 자리 마감 연도")을 제공합니다. 그러나 가장 안전한 접근 방식은 4자리 연도를 지정하는 것입니다.

smalldatetime에서 문자 데이터로 변환할 때 초 또는 밀리초가 포함된 스타일은 해당 위치에 0을 표시합니다. datetime 또는 smalldatetime 값에서 변환할 때 적절한 char 또는 varchar 데이터 형식 길이를 사용하여 원하지 않는 날짜 부분을 자를 수 있습니다.

다음 표는 float 또는 real 데이터를 문자 데이터로 변환할 때의 스타일 값을 보여줍니다.

값 출력

0(기본값) 최대 6자리. 적절하게 과학적 표기법을 사용하세요.

1은 항상 8비트 값입니다. 항상 과학적 표기법을 사용하세요.

2는 항상 16비트 값입니다. 항상 과학적 표기법을 사용하세요.

아래 표에서 왼쪽 열은 돈이나 작은 돈을 문자 데이터로 변환할 때의 스타일 값을 나타냅니다.

값 출력

0(기본값) 소수점 왼쪽 3자리 각각 쉼표로 구분하지 않고, 소수점 오른쪽 2자리를 취하고, 예를 들어 4235.98입니다.

1 소수점 왼쪽 세 자리 숫자는 각각 쉼표로 구분하고, 소수점 오른쪽 두 자리 숫자는 예를 들어 3,510.92로 취합니다.

2 소수점 왼쪽의 세 자리는 각각 쉼표로 구분되지 않고, 소수점 오른쪽의 네 자리는 취합니다(예: 4235.9819).

반환 유형

데이터 유형 0과 동일한 값을 반환합니다.

참고

암시적 변환은 CAST 또는 CONVERT 함수를 지정하지 않는 변환입니다. 반면 명시적 변환은 필수 CAST(CONVERT) 함수가 지정된 변환입니다. 다음 차트에서는 bigint 및 sql_variant를 포함하여 SQL Server 시스템에서 제공하는 데이터 형식에 사용할 수 있는 모든 명시적 및 암시적 변환을 보여줍니다.

참고 유니코드 데이터는 항상 짝수 바이트를 사용하기 때문에 바이너리 또는 varbinary 데이터 유형과 유니코드 사용에서 지원하는 데이터 유형 간에 변환할 때 오류가 발생합니다. 팁. 예를 들어, 이 변환은 16진수 값 41을 반환하는 대신 16진수 값 4100을 반환합니다. SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

No 자동 데이터 형식 지원 텍스트 및 이미지 데이터 유형의 변환. 텍스트 데이터를 문자 데이터로, 이미지 데이터를 바이너리 또는 varbinary 데이터로 명시적으로 변환할 수 있지만 최대 길이는 8000입니다. 잘못된 변환을 시도하면 SQL Server에서는 오류 메시지를 생성합니다(예: 문자가 포함된 문자 식이 int로 변환됨).

CAST 또는 CONVERT의 출력이 문자열이고 입력도 문자열인 경우 출력은 입력과 동일한 데이터 정렬 및 데이터 정렬 레이블을 갖습니다. 입력이 문자열이 아닌 경우 출력에서는 데이터베이스의 기본 데이터 정렬과 필수 기본 데이터 정렬 레이블을 사용합니다. 자세한 내용은 데이터 정렬 우선 순위를 참조하세요.

출력에 다른 데이터 정렬을 할당하려면 CAST 또는 CONVERT 함수의 결과 식에 COLLATE 절을 적용하세요. 예:

SELECT CAST(''abc'' AS varchar(5)) COLLATE French_CS_AS

할당과 관련하여 sql_variant 데이터 유형에서 암시적 변환은 없지만 다음으로 변환됩니다. sql_variant 암시적 변환.

문자 또는 이진 표현식(char, nchar, nvarchar, varchar, 바이너리 또는 varbinary)을 다른 데이터 유형의 표현식으로 변환할 때 데이터가 잘리거나 부분적으로만 표시될 수 있습니다. 너무 짧습니다. 오류를 표시하고 반환할 수 없습니다. 다음 표에 표시된 변환 외에도 char, varchar, nchar, nvarchar, Binary 및 varbinary에 대한 변환이 잘립니다.

varchar *

nchar E

nvarchar E

money, smallmoney, 숫자, 소수, 부동 소수점 또는 실수 문자 E

varchar E

nchar E

nvarchar E

* 결과 길이가 너무 짧아 표시할 수 없습니다.

E 결과 길이가 너무 짧아 표시할 수 없기 때문에 오류를 반환합니다.

Microsoft SQL Server는 왕복 변환(즉, 원래 데이터 유형과의 변환)이 여러 버전에서 동일한 값을 생성하도록 보장합니다. 다음 예에서는 왕복 변환을 보여줍니다.

DECLARE @myval 십진수 (5, 2)SET @myval = 193.57SELECT CAST(CAST(@myval AS varbinary(20)) AS 십진수(10,5) )-- 또는 CONVERTSELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

을 사용하여 이진 값을 구성하여 데이터로 변환하려고 하지 마세요. 숫자 데이터 유형으로 분류되는 유형입니다. SQL Server에서는 10진수 또는 숫자 데이터 형식을 이진수로 변환한 결과가 SQL Server 버전 전체에서 동일하다고 보장하지 않습니다.

아래 예는 너무 짧아서 표시할 수 없는 결과 표현식을 보여줍니다.

USE pubsSELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))FROM titlesWHERE type = ''trad_cook''

다음은 결과 집합입니다.

제목 -------------------------양파, 부추, 마늘 * 버킹엄에서의 50년 * 스시, * s) 영향을 받은 사람이 있나요?

소수점 이하 자릿수가 다른 데이터 유형을 변환하는 경우 값이 가장 가까운 숫자로 잘립니다. 예를 들어 SELECT CAST(10.6496 AS int)는 10을 반환합니다.

변환 시 대상 데이터 타입의 소수점 이하 자릿수가 원본 데이터 타입의 소수점 이하 자릿수보다 작을 경우 변환되는 값은 반올림됩니다. 예를 들어 CAST(10.3496847 AS머니)의 결과는 $10.3497입니다.

SQL Server는 숫자가 아닌 char, nchar, varchar 또는 nvarchar 데이터를 int, float, 숫자 또는 10진수로 변환할 때 오류 메시지를 반환합니다. 또한 SQL Server는 빈 문자열(" ")을 숫자나 10진수로 변환할 때 오류 메시지를 반환합니다.

바이너리 문자열 데이터 사용

binary 또는 varbinary 데이터를 문자 데이터로 변환하고 x 뒤에 홀수 자리의 값을 지정하면 SQL Server에서는 x 뒤에 0을 추가합니다. 짝수 자리 값이 됩니다.

바이너리 데이터에는 0~9 및 A~F(또는 a~f)의 문자가 두 문자 그룹으로 포함됩니다. 바이너리 문자열은 0x로 시작해야 합니다. 예를 들어 FF를 입력하려면 0xFF를 입력합니다. 최대값은 8000바이트 바이너리 값이며, 각 바이트의 최대값은 FF입니다. Binary 데이터 유형은 16진수 데이터에는 사용할 수 없지만 비트 패턴에는 사용할 수 있습니다. 바이너리 데이터로 저장된 16진수의 변환 및 계산 결과의 정확성은 보장할 수 없습니다.

바이너리 데이터 형식의 길이를 지정할 때 두 문자마다 하나의 단위 길이로 계산됩니다. 길이가 10이면 10개의 바이그램이 입력된다는 의미입니다.

0x로 표현되는 빈 바이너리 문자열을 바이너리 데이터로 저장할 수 있습니다.

A. CAST와 CONVERT를 모두 사용

각 예는 책 제목을 검색하고(이 책의 현재 판매량의 첫 번째 숫자는 3입니다) 이 책의 ytd_sales를 char(20)로 변환합니다.

-- CAST.USE pubsGOSELECT SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titlesWHERE CAST(ytd_sales AS char(20)) LIKE ''3%''GO-- CONVERT.USE pubsGOSELECT 사용 SUBSTRING(title, 1, 30) AS Title, ytd_salesFROM titlesWHERE CONVERT(char(20), ytd_sales) LIKE ''3%''GO

다음은 쿼리의 결과 집합입니다.

제목                          ytd_sales   ----------------- ----------- 컴퓨터로 요리하기: Surrep 3876 컴퓨터 공포증 및 비공포증 375 정서적 보안: A New Algo 3336 양파, 리크 및 마늘: Coo 375(4행 영향 받음)

B 산술 연산자와 함께 CAST를 사용하세요

다음 예에서는 현재까지 총 판매량(ytd_sales)을 각 도서의 가격(price)으로 나누어 별도의 열 계산(Copies)을 수행합니다. 이 결과는 가장 가까운 정수로 반올림한 후 int 데이터 유형으로 변환됩니다.

USE pubsGOSELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS ''Copies''FROM titlesGO

다음은 결과 집합입니다.

Copies - -- --- 205 324 6262 205 102 7440 NULL 383 205 NULL 17 187 16 204 418 18 1263 273 (18개 행이 영향을 받음)

CAST를 사용하여 연결

예 아래 CAST 데이터 유형 변환 함수를 사용하여 문자가 아닌, 이진이 아닌 표현식을 연결합니다.

USE pubsGOSELECT ''가격은 '' + CAST(price AS varchar(12))FROM titlesWHERE 가격 > 10.00GO

다음은 결과 집합입니다.

- ------------------ 가격은 19.99 가격은 11.95 가격은 19.99 가격은 22.95 가격은 20.00 가격은 21.59 10.95 가격은 19.99 입니다 가격은 20.95입니다. 가격은 11.95입니다. 가격은 14.99입니다(12개 행이 영향을 받음)

D. 더 읽기 쉬운 텍스트를 얻으려면 CAST를 사용하세요

다음 예에서는 결과를 더 쉽게 읽을 수 있도록 선택 목록에서 CAST를 사용하여 제목 열을 char(50) 열로 변환합니다.

use pubsGOSELECT CAST(title AS char(50)), ytd_salesFROM titlesWHERE type = ''trad_cook''GO

다음은 결과 집합입니다.              ytd_sales---- ---- ------------------------------ ---- --- --양파, 리크, 마늘: 버킹엄 궁전 주방에서 37550년간의 요리 비법 15096스시, 누구든지 4095(3줄 영향을 받음)

E. LIKE 절 CAST와 함께 사용

다음 예에서는 LIKE 절과 함께 사용하기 위해 int 열(ytd_sales 열)을 char(20) 열로 변환합니다.

pubsGOSELECT 제목 사용,

-

ytd_salesFROM titlesWHERE CAST(ytd_sales AS char(20)) LIKE ''15%'' AND type = ''trad_cook''GO

다음은 결과 집합입니다.

title ytd_sales ----------------------- -- ---------------------

MySQL:

MySQL의 CAST() 및 CONVERT() 함수를 사용하여 한 유형의 값을 얻고 다른 유형의 값을 생성할 수 있습니다. 두 가지의 구체적인 구문은 다음과 같습니다.

1 CAST(값 형식)

2 CONVERT(값, 형식)

은 CAST(xxx AS 형식) ), CONVERT(xxx, 유형).

변환할 수 있는 종류가 제한되어 있습니다. 이 유형은 다음 값 중 하나일 수 있습니다.

바이너리(바이너리 접두사의 효과 포함): BINARY

문자 유형, 매개변수를 사용할 수 있습니다: CHAR()

날짜: DATE

시간: TIME

날짜 시간 유형: DATETIME

부동 소수점 수: DECIMAL

정수: SIGNED

부호 없는 정수: UNSIGNED

다음은 몇 가지 예입니다:

예 1

1 mysql> SELECTCONVERT('23',SIGNED);

2 +--- ------+

3 | CONVERT('23',SIGNED) |

4 +---- - ----+

5 | 23 |

6 +------------ - -------+

7 1개 행 삽입

예제 2

1 mysql> SELECTCAST('125e342.83'ASsigned);

2 +--------------------------------+

3 CAST('125e342.83 | ' 할당됨) |

4 +---------------------------------+

5 |125 |

6 +--------------------------------+

7 1행 삽입

예제 3

1 mysql> SELECTCAST('3.35'ASsigned);

2 +---------- ------ --------+

3 | CAST('3.35'ASsigned) |

4 +------------ ------ -------+

5 3 |

6 +------ ------ +

7 1개 행 삽입

위의 예와 같이 Cast(a as signed)를 사용하여 varchar를 int로 변환합니다. 여기서 a는 varchar 유형의 문자열입니다.

예제 4

SQL Server에서 다음 코드는 datetime 변수에 단순 날짜와 단순 시간만 포함된 경우 날짜 저장의 16진수 저장 결과를 보여줍니다.

01 DECLARE @dt 날짜시간

02

03 --단순 날짜

04 SET @dt='1900-1-2'

05 SELECT CAST(@dt asbinary(8))

06 -- 결과: 0x0000000100000000

07

08 --간단한 시간

09 SET @dt='00:00:01'

10 SELECT CAST(@dt asbinary(8))

11 -- 결과: 0x000000000000012C

MySQL 유형 변환은 SQL Server의 변환과 동일하지만 유형 매개변수는 CAST(xxx AS 유형), CONVERT(xxx, 유형)와 같이 약간 다릅니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.