CAST và CHUYỂN ĐỔI (Transact-SQL) – SQL Server – máy chủ sql chuyển đổi 120

Tham chiếu cho các hàm CAST và CONVERT Transact-SQL. Các hàm này chuyển đổi các biểu thức từ kiểu dữ liệu này sang kiểu dữ liệu khác.

Bạn đang xem : chuyển đổi máy chủ sql 120

CAST và CHUYỂN ĐỔI (Transact-SQL)

Trang này có hữu ích không?

Bất kỳ phản hồi bổ sung?

Phản hồi sẽ được gửi đến Microsoft: Bằng cách nhấn nút gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Chính sách quyền riêng tư.

Cảm ơn bạn.

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Các hàm này chuyển đổi một biểu thức của một kiểu dữ liệu này sang một kiểu dữ liệu khác.

Cú pháp

  - Cú pháp CAST:
CAST (biểu thức AS data_type [(length)])
  
- Cú pháp CHUYỂN ĐỔI:
CHUYỂN ĐỔI (kiểu_ dữ liệu [(độ dài)], biểu thức [, kiểu])
 

Quy ước về cú pháp Transact-SQL

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

biểu thức
Mọi biểu thức hợp lệ.

data_type
Loại dữ liệu đích. Điều này bao gồm xml , bigint sql_variant . Không thể sử dụng các loại dữ liệu bí danh.

chiều dài
Một số nguyên tùy chọn chỉ định độ dài của kiểu dữ liệu đích, dành cho các kiểu dữ liệu cho phép người dùng chỉ định độ dài. Giá trị mặc định là 30.

phong cách
Một biểu thức số nguyên chỉ định cách hàm CONVERT sẽ dịch biểu thức. Đối với giá trị kiểu là NULL, NULL được trả về. data_type xác định phạm vi.

Loại trả lại

Trả về biểu thức, được dịch sang data_type.

Đối với biểu thức kiểu dữ liệu ngày hoặc giờ, kiểu có thể có một trong các giá trị được hiển thị trong bảng sau. Các giá trị khác được xử lý bằng 0. Bắt đầu với SQL Server 2012 (11.x), các kiểu duy nhất được hỗ trợ, khi chuyển đổi từ kiểu ngày và giờ thành datetimeoffset , là 0 hoặc 1. Tất cả các kiểu chuyển đổi khác đều trả về lỗi 9809.

Lưu ý

SQL Server hỗ trợ định dạng ngày tháng, theo kiểu Ả Rập, với thuật toán Kuwait.

Không có thế kỷ (yy) (1)
Với thế kỷ (yyyy)
Tiêu chuẩn
Đầu vào / Đầu ra (3)


0 hoặc 100 (1,2)
Mặc định cho datetime và smalldatetime
mon dd yyyy hh: miAM (hoặc PM)

1
101
CHÚNG TA.
1 = mm / dd / yy
101 = mm / dd / yyyy

2
102
ANSI
2 = yy.mm.dd
102 = yyyy.mm.dd

3
103
Anh / Pháp
3 = dd / mm / yy
103 = dd / mm / yyyy

4
104
tiếng Đức
4 = dd.mm.yy
104 = dd.mm.yyyy

5
105
người Ý
5 = dd-mm-yy
105 = dd-mm-yyyy

6
106 (1)

6 = dd mon yy
106 = dd mon yyyy

7
107 (1)

7 = Thứ Hai ngày, năm
107 = Thứ Hai ngày, năm

8 hoặc 24
108

hh: mi: ss


9 hoặc 109 (1,2)
Mặc định + mili giây
mon dd yyyy hh: mi: ss: mmmAM (hoặc PM)

10
110
Hoa Kỳ
10 = mm-dd-yy
110 = mm-dd-yyyy

11
111
NHẬT BẢN
11 = yy / mm / dd
111 = yyyy / mm / dd

12
112
ISO
12 = yymmdd
112 = yyyymmdd


13 hoặc 113 (1,2)
Châu Âu mặc định + mili giây
dd mon yyyy hh: mi: ss: mmm (24h)

14
114

hh: mi: ss: mmm (24h)


20 hoặc 120 (2)
ODBC chuẩn
yyyy-mm-dd hh: mi: ss (24h)


21 hoặc 25 hoặc 121 (2)
ODBC chuẩn (với mili giây) mặc định cho thời gian, ngày tháng, datetime2 và datetimeoffset
yyyy-mm-dd hh: mi: ss.mmm (24h)

22

CHÚNG TA.
mm / dd / yy hh: mi: ss AM (hoặc PM)


23
ISO8601
yyyy-mm-dd


126 (4)
ISO8601
yyyy-mm-ddThh: mi: ss.mmm (không có dấu cách)

Lưu ý: Đối với giá trị mili giây (mmm) là 0, giá trị phần thập phân mili giây sẽ không hiển thị . Ví dụ: giá trị ‘2012-11-07T18: 26: 20.000 hiển thị là’ 2012-11-07T18: 26: 20 ‘.


127 (6, 7)
ISO8601 với múi giờ Z.
yyyy-MM-ddThh: mm: ss.fffZ (không có khoảng trắng)

Lưu ý: Đối với giá trị mili giây (mmm) là 0, giá trị thập phân mili giây sẽ không hiển thị. Ví dụ: giá trị ‘2012-11-07T18: 26: 20.000 sẽ hiển thị là’ 2012-11-07T18: 26: 20 ‘.


130 (1,2)
Hijri (5)
dd mon yyyy hh: mi: ss: mmmAM

Theo phong cách này, mon đại diện cho một mã đa mã Hijri đại diện cho tên đầy đủ của tháng. Giá trị này không hiển thị chính xác trên cài đặt SSMS mặc định của Hoa Kỳ.


131 (2)
Hijri (5)
dd / mm / yyyy hh: mi: ss: mmmAM

1 Các giá trị kiểu này trả về kết quả không xác định. Bao gồm tất cả các phong cách (yy) (không có thế kỷ) và một tập hợp con các phong cách (yyyy) (có thế kỷ).

2 Giá trị mặc định ( 0 hoặc 100 , 9 hoặc 109 , 13 hoặc 113 , 20 hoặc 120 , 23 21 hoặc < strong> 25 hoặc 121 ) luôn quay trở lại thế kỷ (yyyy).

3 Nhập khi bạn chuyển đổi sang datetime ; xuất khi bạn chuyển đổi sang dữ liệu ký tự.

4 Được thiết kế để sử dụng XML. Để chuyển đổi từ datetime hoặc smalldatetime sang dữ liệu ký tự, hãy xem bảng trước để biết định dạng đầu ra.

5 Hijri là một hệ thống lịch với một số biến thể. SQL Server sử dụng thuật toán Kuwait.

Quan trọng

Theo mặc định, SQL Server diễn giải năm có hai chữ số dựa trên năm giới hạn là 2049. Điều đó có nghĩa là SQL Server diễn giải năm hai chữ số 49 là 2049 và năm hai chữ số 50 là 1950. Nhiều ứng dụng khách, bao gồm dựa trên các đối tượng Tự động hóa, sử dụng năm giới hạn là 2030. SQL Server cung cấp tùy chọn cấu hình năm giới hạn hai chữ số để thay đổi năm giới hạn được sử dụng bởi SQL Server. Điều này cho phép xử lý ngày tháng một cách nhất quán. Chúng tôi khuyên bạn nên chỉ định năm có bốn chữ số.

6 Chỉ được hỗ trợ khi truyền từ dữ liệu ký tự sang datetime hoặc smalldatetime . Khi truyền dữ liệu ký tự chỉ đại diện cho các thành phần ngày tháng hoặc chỉ thời gian cho các kiểu dữ liệu datetime hoặc smalldatetime , thành phần thời gian không xác định được đặt thành 00: 00: 00.000 và ngày không xác định thành phần được đặt thành 1900-01-01.

7 Sử dụng chỉ báo múi giờ tùy chọn Z để giúp ánh xạ các giá trị datetime XML có thông tin múi giờ tới SQL Server datetime dễ dàng hơn các giá trị không có múi giờ. Z biểu thị múi giờ UTC-0. Độ lệch HH: MM, theo hướng + hoặc -, cho biết các múi giờ khác. Ví dụ: 2006-12-12T23: 45: 12-08: 00 .

Khi chuyển đổi smalldatetime sang dữ liệu ký tự, các kiểu bao gồm giây hoặc mili giây sẽ hiển thị số không ở các vị trí này. Khi chuyển đổi từ các giá trị datetime hoặc smalldatetime , hãy sử dụng độ dài loại dữ liệu char hoặc varchar thích hợp để cắt bớt các phần ngày không mong muốn .

Khi chuyển đổi dữ liệu ký tự thành datetimeoffset , sử dụng kiểu bao gồm thời gian, phần bù múi giờ sẽ được thêm vào kết quả.

kiểu float và real

Đối với biểu thức float hoặc real , kiểu có thể có một trong các giá trị được hiển thị trong bảng sau. Các giá trị khác được xử lý bằng 0.

Giá trị
Đầu ra

0 (mặc định)
Có tối đa 6 chữ số. Sử dụng trong ký hiệu khoa học, khi thích hợp.

1
Luôn luôn là 8 chữ số. Luôn luôn sử dụng trong ký hiệu khoa học.

2
Luôn luôn là 16 chữ số. Luôn luôn sử dụng trong ký hiệu khoa học.

3
Luôn luôn là 17 chữ số. Sử dụng để chuyển đổi không mất dữ liệu. Với kiểu này, mọi giá trị thực hoặc float riêng biệt được đảm bảo chuyển đổi thành một chuỗi ký tự riêng biệt.

Áp dụng cho: SQL Server (Bắt đầu trong SQL Server 2016 (13.x )) và Cơ sở dữ liệu SQL Azure.

126, 128, 129
Bao gồm vì lý do kế thừa; bản phát hành trong tương lai có thể không dùng những giá trị này.

phong cách tiền và smallmoney

Đối với biểu thức money hoặc smallmoney , kiểu có thể có một trong các giá trị được hiển thị trong bảng sau. Các giá trị khác được xử lý bằng 0.

Giá trị
Đầu ra

0 (mặc định)
Không có dấu phẩy mỗi ba chữ số ở bên trái của dấu thập phân và hai chữ số ở bên phải của dấu thập phân

Ví dụ: 4235,98.

1
Dấu phẩy cứ ba chữ số ở bên trái dấu thập phân và hai chữ số ở bên phải dấu thập phân

Ví dụ: 3.510,92.

2
Không có dấu phẩy mỗi ba chữ số ở bên trái của dấu thập phân và bốn chữ số ở bên phải của dấu thập phân

Ví dụ: 4235,9819.

126
Tương đương với kiểu 2, khi chuyển đổi thành char (n) hoặc varchar (n)

xml styles

Đối với biểu thức xml , kiểu có thể có một trong các giá trị được hiển thị trong bảng sau. Các giá trị khác được xử lý bằng 0.

Giá trị
Đầu ra

0 (mặc định)
Sử dụng hành vi phân tích cú pháp mặc định loại bỏ khoảng trắng không đáng kể và không cho phép tập hợp con DTD nội bộ.

Lưu ý: Khi chuyển đổi sang dữ liệu xml kiểu, khoảng trắng không đáng kể trong SQL Server được xử lý khác với trong XML 1.0. Để biết thêm thông tin, hãy xem Tạo phiên bản của dữ liệu XML .

1
Giữ khoảng trắng không đáng kể. Cài đặt kiểu này đặt cách xử lý xml: space mặc định để phù hợp với hoạt động của xml: space = “secure” .

2
Bật xử lý tập hợp con DTD nội bộ có giới hạn.

Nếu được bật, máy chủ có thể sử dụng thông tin sau được cung cấp trong tập hợp con DTD nội bộ, để thực hiện các hoạt động phân tích cú pháp không xác thực.

– Mặc định đối với các thuộc tính được áp dụng
– Các tham chiếu thực thể bên trong được giải quyết và mở rộng
– Mô hình nội dung DTD được kiểm tra về tính đúng cú pháp

Bộ phân tích cú pháp bỏ qua các tập con DTD bên ngoài. Ngoài ra, nó không đánh giá khai báo XML để xem liệu thuộc tính độc lập có giá trị hay không hay không. Thay vào đó, nó phân tích phiên bản XML như một tài liệu độc lập.

3
Giữ khoảng trắng không đáng kể và cho phép xử lý tập hợp con DTD nội bộ có giới hạn.

Xem Thêm  Chèn JavaScript vào HTML bằng Thẻ tập lệnh - thẻ html tập lệnh js

Kiểu nhị phân

Đối với binary (n) , char (n) , varbinary (n) hoặc varchar (n) < / strong> biểu thức, kiểu có thể có một trong các giá trị được hiển thị trong bảng sau. Các giá trị kiểu không được liệt kê trong bảng sẽ trả về lỗi.

Giá trị
Đầu ra

0 (mặc định)
Dịch các ký tự ASCII thành các byte nhị phân hoặc các byte nhị phân sang các ký tự ASCII. Mỗi ký tự hoặc byte được chuyển đổi 1: 1.

Đối với kiểu_dữ liệu nhị phân, các ký tự 0x được thêm vào bên trái kết quả.

1 , 2
Đối với kiểu_ dữ liệu nhị phân, biểu thức phải là một biểu thức ký tự. Biểu thức phải có số chữ số thập lục phân chẵn (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Nếu kiểu được đặt thành 1, biểu thức phải có 0x là hai ký tự đầu tiên. Nếu biểu thức chứa một số ký tự lẻ hoặc nếu bất kỳ ký tự nào không hợp lệ, thì sẽ xảy ra lỗi.

Nếu độ dài của biểu thức được chuyển đổi vượt quá độ dài của data_type, thì kết quả là đúng bị cắt ngắn.

Loại data_type có độ dài cố định lớn hơn kết quả được chuyển đổi có các số không được thêm vào bên phải kết quả.

Loại ký tự data_type yêu cầu biểu thức nhị phân. Mỗi ký tự nhị phân được chuyển đổi thành hai ký tự thập lục phân. Giả sử độ dài của biểu thức được chuyển đổi vượt quá độ dài của kiểu dữ liệu. Trong trường hợp đó, nó sẽ bị cắt ngắn.

Đối với kiểu ký tự có kích thước cố định là data_type, nếu độ dài của kết quả được chuyển đổi nhỏ hơn độ dài của data_type, thì dấu cách sẽ được thêm vào bên phải của biểu thức được chuyển đổi thành duy trì số chữ số thập lục phân chẵn.

Các ký tự 0x không được thêm vào bên trái kết quả được chuyển đổi cho kiểu 2.

Chuyển đổi ngầm định

Chuyển đổi ngầm định không yêu cầu đặc tả của hàm CAST hoặc hàm CONVERT. Chuyển đổi rõ ràng yêu cầu đặc tả của hàm CAST hoặc hàm CONVERT. Hình minh họa sau đây cho thấy tất cả các chuyển đổi kiểu dữ liệu rõ ràng và ngầm định được phép đối với các kiểu dữ liệu do hệ thống SQL Server cung cấp. Chúng bao gồm bigint sql_variant xml . Không có chuyển đổi ngầm định nào khi chuyển nhượng từ kiểu dữ liệu sql_variant , nhưng có chuyển đổi ngầm định thành sql_variant .

Mẹo

Trung tâm Tải xuống của Microsoft có sẵn biểu đồ này để tải xuống dưới dạng tệp PNG.

Biểu đồ trên minh họa tất cả các chuyển đổi rõ ràng và ẩn được cho phép trong SQL Server, nhưng kiểu dữ liệu kết quả của chuyển đổi phụ thuộc vào hoạt động đang được thực hiện:

  • Đối với các chuyển đổi rõ ràng, bản thân câu lệnh sẽ xác định kiểu dữ liệu kết quả.
  • Đối với các chuyển đổi ngầm định, các câu lệnh gán chẳng hạn như đặt giá trị của một biến hoặc chèn một giá trị vào một cột sẽ dẫn đến kiểu dữ liệu được xác định bởi khai báo biến hoặc định nghĩa cột.
  • Đối với các toán tử so sánh hoặc các biểu thức khác, kiểu dữ liệu kết quả sẽ phụ thuộc vào các quy tắc về mức độ ưu tiên của kiểu dữ liệu .

Mẹo

Bạn có thể xem một ví dụ thực tế về tác động của mức độ ưu tiên của loại dữ liệu trong chuyển đổi trong phần này.

Khi bạn chuyển đổi giữa datetimeoffset và các loại ký tự char , nchar , nvarchar varchar , phần bù múi giờ đã chuyển đổi phải luôn có hai chữ số cho cả HH và MM. Ví dụ: -08: 00.

Lưu ý

Vì dữ liệu Unicode luôn sử dụng số byte chẵn, hãy thận trọng khi bạn chuyển đổi binary hoặc varbinary sang hoặc từ các kiểu dữ liệu được hỗ trợ Unicode. Ví dụ: chuyển đổi sau không trả về giá trị thập lục phân là 41. Nó trả về giá trị thập lục phân là 4100: SELECT CAST (CAST (0x41 AS nvarchar) AS varbinary) . Để biết thêm thông tin, hãy xem Đối chiếu và Hỗ trợ Unicode .

Loại dữ liệu giá trị lớn

Các loại dữ liệu giá trị lớn có cùng hành vi chuyển đổi ngầm và rõ ràng như các loại dữ liệu nhỏ hơn – cụ thể là nvarchar , varbinary varchar > kiểu dữ liệu. Tuy nhiên, hãy xem xét các nguyên tắc sau:

  • Chuyển đổi từ hình ảnh thành varbinary (max) và ngược lại, hoạt động như một chuyển đổi ngầm định, cũng như chuyển đổi giữa văn bản varchar (max) ntext nvarchar (max) .
  • Chuyển đổi từ các kiểu dữ liệu có giá trị lớn, chẳng hạn như varchar (max) , sang một kiểu dữ liệu đối ứng nhỏ hơn, chẳng hạn như varchar , là một chuyển đổi ngầm, nhưng bị cắt bớt xảy ra nếu kích thước của giá trị lớn vượt quá độ dài được chỉ định của loại dữ liệu nhỏ hơn.
  • Việc chuyển đổi từ nvarchar , varbinary hoặc varchar sang các loại dữ liệu giá trị lớn tương ứng của chúng diễn ra ngầm.
  • Chuyển đổi từ loại dữ liệu sql_variant sang các loại dữ liệu giá trị lớn là một chuyển đổi rõ ràng.
  • Không thể chuyển đổi các loại dữ liệu có giá trị lớn thành loại dữ liệu sql_variant .

Để biết thêm thông tin về chuyển đổi từ loại dữ liệu xml , hãy xem Tạo phiên bản của dữ liệu XML .

kiểu dữ liệu xml

Khi bạn truyền kiểu dữ liệu xml một cách rõ ràng hoặc ngầm định sang kiểu dữ liệu chuỗi hoặc nhị phân, nội dung của kiểu dữ liệu xml được tuần tự hóa dựa trên một tập hợp xác định của quy tắc. Để biết thông tin về các quy tắc này, hãy xem Định nghĩa việc tuần tự hóa dữ liệu XML . Để biết thông tin về cách chuyển đổi từ các loại dữ liệu khác sang loại dữ liệu xml , hãy xem Tạo phiên bản của dữ liệu XML .

kiểu dữ liệu văn bản và hình ảnh

Loại dữ liệu văn bản hình ảnh không hỗ trợ chuyển đổi loại dữ liệu tự động. Bạn có thể chuyển đổi rõ ràng dữ liệu văn bản thành dữ liệu ký tự và dữ liệu hình ảnh thành nhị phân hoặc varbinary , nhưng độ dài tối đa là 8000 byte. Nếu bạn thử chuyển đổi không chính xác, chẳng hạn như cố chuyển đổi một biểu thức ký tự bao gồm các chữ cái thành int , SQL Server sẽ trả về thông báo lỗi.

Đối chiếu đầu ra

Khi các hàm CAST hoặc CONVERT xuất ra một chuỗi ký tự và chúng nhận được đầu vào là chuỗi ký tự, đầu ra có cùng nhãn đối chiếu và đối chiếu với đầu vào. Nếu đầu vào không phải là một chuỗi ký tự, đầu ra có đối chiếu mặc định của cơ sở dữ liệu và nhãn đối chiếu của mặc định cưỡng chế. Để biết thêm thông tin, hãy xem Quyền ưu tiên đối chiếu (Giao dịch-SQL) .

Để gán một đối chiếu khác cho đầu ra, hãy áp dụng mệnh đề COLLATE cho biểu thức kết quả của hàm CAST hoặc CONVERT. Ví dụ:

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

Cắt bớt và làm tròn kết quả

Khi chuyển đổi ký tự hoặc biểu thức nhị phân ( binary , char , nchar , nvarchar , varbinary hoặc varchar ) cho một biểu thức của một kiểu dữ liệu khác, hoạt động chuyển đổi có thể cắt bớt dữ liệu đầu ra, chỉ hiển thị một phần dữ liệu đầu ra hoặc trả về lỗi. Những trường hợp này sẽ xảy ra nếu kết quả quá ngắn để hiển thị. Chuyển đổi thành binary , char, nchar , nvarchar , varbinary hoặc varchar bị cắt bớt, ngoại trừ các chuyển đổi được hiển thị trong bảng sau.

Từ kiểu dữ liệu
Đến kiểu dữ liệu
Kết quả

int , smallint hoặc tinyint
char
*

varchar
*

nchar
E

nvarchar
E

money , smallmoney , số , thập phân , float hoặc real
char
E

varchar
E

nchar
E

nvarchar
E

* = Độ dài kết quả quá ngắn để hiển thị

E = Lỗi trả về vì độ dài kết quả quá ngắn để hiển thị.

SQL Server đảm bảo rằng chỉ các chuyển đổi khứ hồi, hay nói cách khác là các chuyển đổi chuyển đổi một kiểu dữ liệu từ kiểu dữ liệu ban đầu và ngược lại, mang lại các giá trị giống nhau giữa các phiên bản. Ví dụ sau đây cho thấy một chuyển đổi khứ hồi như vậy:

  DECLARE @myval DECIMAL (5, 2);
SET @myval = 193,57;
CHỌN CAST (CAST (@myval AS VARBINARY (20)) AS DECIMAL (10,5));
- Hoặc, sử dụng CONVERT
CHỌN CHUYỂN ĐỔI (DECIMAL (10,5), CHUYỂN ĐỔI (VARBINARY (20), @myval));
 

Cảnh báo

Không tạo giá trị nhị phân , sau đó chuyển đổi chúng thành kiểu dữ liệu của danh mục kiểu dữ liệu số. SQL Server không đảm bảo rằng kết quả của việc chuyển đổi kiểu dữ liệu thập phân hoặc số sang nhị phân , sẽ giống nhau giữa các phiên bản của SQL Server .

Ví dụ sau đây cho thấy một biểu thức kết quả quá nhỏ để hiển thị.

  SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN p.FirstName, p.LastName, SUBSTRING (p.Title, 1, 25) AS Title,
    CAST (e.SickLeaveHours AS char (1)) AS [Nghỉ ốm]
TỪ Nguồn Nhân lực. Nhân viên e Tham gia Người. Người p
    BẬT e.BusinessEntityID = p.BusinessEntityID
KHÔNG PHẢI e.BusinessEntityID & gt; Số 5;
 

Đây là tập hợp kết quả.

  FirstName LastName Tiêu đề Nghỉ ốm
--------- ------------- ------- -------- '
Ken Sanchez NULL *
Terri Duffy NULL *
Roberto Tamburello NULL *
Rob Walters NULL *
Gail Erickson Ms. *

(5 hàng bị ảnh hưởng)
 

Khi bạn chuyển đổi các kiểu dữ liệu khác nhau ở vị trí thập phân, SQL Server đôi khi sẽ trả về giá trị kết quả bị cắt ngắn và vào những lúc khác, nó sẽ trả về giá trị làm tròn. Bảng này hiển thị hành vi.

Từ
Đến
Hành vi

số
số
Tròn

số
int
Cắt bớt

số
tiền
Tròn

tiền
int
Tròn

tiền
số
Tròn

float
int
Cắt bớt

float
số
Làm tròn

Việc chuyển đổi các giá trị float sử dụng ký hiệu khoa học thành thập phân hoặc số bị hạn chế ở các giá trị có độ chính xác 17 chữ số chỉ còn. Bất kỳ giá trị nào có độ chính xác cao hơn 17 vòng đến 0.

float
ngày giờ
Tròn

ngày giờ
int
Tròn

Ví dụ: các giá trị 10.6496 và -10.6496 có thể bị cắt bớt hoặc làm tròn trong quá trình chuyển đổi thành các loại int hoặc số :

  CHỌN CAST (10.6496 AS INT) làm trunc1,
        CAST (-10.6496 AS INT) dưới dạng trunc2,
        CAST (10,6496 AS NUMERIC) ở vòng 1,
        CAST (-10,6496 AS NUMERIC) as round2;
 

Kết quả của truy vấn được hiển thị trong bảng sau:

Xem Thêm  Phương thức Java String startedWith () - chuỗi java bắt đầu bằng

trunc1
trunc2
vòng 1
round2

10
-10
11
-11

Khi chuyển đổi các kiểu dữ liệu trong đó kiểu dữ liệu đích có ít chữ số thập phân hơn kiểu dữ liệu nguồn, giá trị được làm tròn. Ví dụ: chuyển đổi này trả về $ 10.3497 :

SELECT CAST (10.3496847 AS money);

SQL Server trả về thông báo lỗi khi chuyển đổi dữ liệu char , nchar không phải số, nvarchar hoặc varchar thành thập phân , float , int , số . SQL Server cũng trả về lỗi khi một chuỗi trống (“”) được chuyển đổi thành số hoặc thập phân .

Các kiểu mà chuyển đổi chuỗi thành ngày giờ là không xác định như sau:

  • Tất cả các kiểu dưới 1001
  • 106
  • 107
  • 109
  • 113
  • 130

1 Ngoại trừ kiểu 20 và 21

Để biết thêm thông tin, hãy xem Chuyển đổi không xác định các chuỗi ngày theo nghĩa đen thành các giá trị DATE .

Ký tự bổ sung (cặp thay thế)

Bắt đầu với SQL Server 2012 (11.x), khi sử dụng đối chiếu ký tự bổ sung (SC), thao tác CAST từ nchar hoặc nvarchar thành nchar hoặc nvarchar loại có chiều dài nhỏ hơn sẽ không cắt ngắn bên trong cặp thay thế. Thay vào đó, thao tác cắt bớt trước ký tự phụ. Ví dụ: đoạn mã sau để lại @x chỉ giữ 'ab' . Không có đủ không gian để chứa nhân vật phụ.

  KHAI BÁO @x NVARCHAR (10) = 'ab' + NCHAR (0x10000);
CHỌN CAST (@x AS NVARCHAR (3));
 

Khi sử dụng đối chiếu SC, hành vi của CONVERT , tương tự như hành vi của CAST . Để biết thêm thông tin, hãy xem Hỗ trợ đối chiếu và Unicode – Ký tự bổ sung .

Hỗ trợ khả năng tương thích

Trong các phiên bản trước của SQL Server, kiểu mặc định cho các hoạt động CAST và CONVERT trên các kiểu dữ liệu time datetime2 là 121, ngoại trừ khi một trong hai kiểu được sử dụng trong máy tính biểu thức cột. Đối với các cột được tính toán, kiểu mặc định là 0. Hành vi này ảnh hưởng đến các cột được tính toán khi chúng được tạo, được sử dụng trong các truy vấn liên quan đến tham số hóa tự động hoặc được sử dụng trong các định nghĩa ràng buộc.

Dưới cấp độ tương thích 110 trở lên, các hoạt động CAST và CONVERT trên loại dữ liệu time datetime2 luôn có 121 làm kiểu mặc định . Nếu truy vấn dựa trên hành vi cũ, hãy sử dụng mức tương thích nhỏ hơn 110 hoặc chỉ định rõ ràng kiểu 0 trong truy vấn bị ảnh hưởng.

Giá trị Mức độ tương thích
Kiểu mặc định cho CAST và CONVERT1
Kiểu mặc định cho cột được tính

& lt; 110
121

& gt; = 110
121
121

1 Ngoại trừ các cột được tính toán

Nâng cấp cơ sở dữ liệu lên cấp độ tương thích 110 trở lên sẽ không thay đổi dữ liệu người dùng đã được lưu trữ vào đĩa. Bạn phải sửa dữ liệu này theo cách thủ công nếu thích hợp. Ví dụ: nếu bạn đã sử dụng SELECT INTO để tạo bảng từ nguồn chứa biểu thức cột được tính toán được mô tả ở trên, thì dữ liệu (sử dụng kiểu 0) sẽ được lưu trữ thay vì chính định nghĩa cột được tính toán. Bạn phải cập nhật dữ liệu này theo cách thủ công để phù hợp với kiểu 121.

Ví dụ

A. Sử dụng cả CAST và CONVERT

Những ví dụ này truy xuất tên của sản phẩm, đối với những sản phẩm có 3 là chữ số đầu tiên của giá niêm yết và chuyển đổi các giá trị ListPrice của chúng thành int .

  - Sử dụng CAST
SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN ĐĂNG KÝ (Tên, 1, 30) Làm Tên Sản phẩm, Danh sách Giá
TỪ Sản xuất. Sản phẩm
WHERE CAST (ListPrice AS int) LIKE '33% ';
ĐI
  
- Sử dụng CONVERT.
SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN ĐĂNG KÝ (Tên, 1, 30) Làm Tên Sản phẩm, Danh sách Giá
TỪ SẢN XUẤT.
WHERE CONVERT (int, ListPrice) THÍCH '33% ';
ĐI
 

Đây là tập hợp kết quả. Bộ kết quả mẫu giống nhau cho cả CAST và CONVERT.

  ProductName ListPrice
--------------------------------- -
Khung đường LL - Đen, 58 337.22
Khung đường LL - Đen, 60 337.22
Khung đường LL - Đen, 62 337,22
Khung đường LL - Đỏ, 44 337,22
Khung đường LL - Đỏ, 48 337,22
Khung đường LL - Đỏ, 52 337,22
Khung đường LL - Đỏ, 58 337,22
Khung đường LL - Đỏ, 60 337,22
Khung đường LL - Đỏ, 62 337,22
Khung đường LL - Đen, 44 337.22
Khung đường LL - Đen, 48 337.22
Khung đường LL - Đen, 52 337.22
Mountain-100 Black, 38 3374,99
Mountain-100 Black, 42 ​​3374,99
Mountain-100 Black, 44 3374,99
Mountain-100 Black, 48 3374,99
Bánh trước đường HL 330.06
Khung tham quan LL - Màu vàng, 62 333,42
Khung tham quan LL - Xanh lam, 50 333.42
Khung tham quan LL - Xanh lam, 54 333,42
Khung tham quan LL - Xanh lam, 58 333.42
Khung tham quan LL - Xanh lam, 62 333,42
Khung tham quan LL - Màu vàng, 44 333,42
Khung tham quan LL - Màu vàng, 50 333.42
Khung tham quan LL - Màu vàng, 54 333,42
Khung tham quan LL - Màu vàng, 58 333,42
Khung tham quan LL - Xanh lam, 44 333,42
Lốp đường HL 32.60

(28 hàng bị ảnh hưởng)
 

B. Sử dụng CAST với các toán tử số học

Ví dụ này tính toán một phép tính cột ( Computed ) bằng cách chia tổng doanh số bán hàng từ đầu năm đến nay ( SalesYTD ) cho phần trăm hoa hồng ( CommissionPCT < / mã>). Giá trị này được làm tròn thành số nguyên gần nhất và sau đó được CAST thành kiểu dữ liệu int .

 SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN CAST (ROUND (SalesYTD / CommissionPCT, 0) AS INT) AS được tính
TỪ Sales.SalesPerson
WHERE Hoa hồngPCT! = 0;
ĐI
 

Đây là tập hợp kết quả.

  Computed
------
379753754
346698349
257144242
176493899
281101272
0
301872549
212623750
298948202
250784119
239246890
101664220
124511336
97688107

(14 hàng bị ảnh hưởng)
 

C. Sử dụng CAST để nối

Ví dụ này nối các biểu thức không ký tự bằng cách sử dụng CAST. Nó sử dụng cơ sở dữ liệu AdventureWorksDW.

  CHỌN 'Giá niêm yết là' + CAST (ListPrice AS VARCHAR (12)) AS ListPrice
TỪ dbo.DimProduct
Danh sách Ở ĐÂU Giá GIỮA 350,00 VÀ 400,00;
 

Đây là tập hợp kết quả.

  ListPrice
------------------------
Giá niêm yết là 357,06
Giá niêm yết là 364.09
Giá niêm yết là 364.09
Giá niêm yết là 364.09
Giá niêm yết là 364.09
 

D. Sử dụng CAST để tạo ra văn bản dễ đọc hơn

Ví dụ này sử dụng CAST trong danh sách CHỌN, để chuyển đổi cột Tên thành cột char (10) . Nó sử dụng cơ sở dữ liệu AdventureWorksDW.

  CHỌN DISTINCT CAST (EnglishProductName AS CHAR (10)) AS Name, ListPrice
TỪ dbo.DimProduct
WHERE EnglishTên sản phẩm LIKE 'Long-Sleeve Logo Jersey, M';
 

Đây là tập hợp kết quả.

  Name ListPrice
---------- ---------
Long-Sleev 31,2437
Dài-Sleev 32,4935
Long-Sleev 49,99
 

E. Sử dụng CAST với mệnh đề LIKE

Ví dụ này chuyển đổi các giá trị money column SalesYTD thành kiểu dữ liệu int , sau đó thành kiểu dữ liệu char (20) < / code>, để mệnh đề LIKE có thể sử dụng nó.

  SỬ DỤNG AdventureWorks2012;
ĐI
CHỌN p.FirstName, p.LastName, s.SalesYTD, s.BusinessEntityID
TỪ NGƯỜI. NGƯỜI NHƯ p
THAM GIA Sales.SalesPerson AS s
    ON p.BusinessEntityID = s.BusinessEntityID
WHERE CAST (CAST (s.SalesYTD AS INT) AS char (20)) LIKE '2%';
ĐI
 

Đây là tập hợp kết quả.

  FirstName LastName SalesYTD BusinessEntityID
---------------- ------------------------------- - -------------
Tsvi Reiter 2811012.7151 279
Syed Abbas 219088.8836 288
Rachel Valdez 2241204.0424 289

(3 hàng bị ảnh hưởng)
 

F. Sử dụng CONVERT hoặc CAST với XML đã nhập

Các ví dụ này cho thấy việc sử dụng CONVERT để chuyển đổi dữ liệu sang XML đã nhập, bằng cách sử dụng Kiểu dữ liệu XML và các cột (SQL Server) .

Ví dụ này chuyển đổi một chuỗi có khoảng trắng, văn bản và đánh dấu thành XML đã nhập và xóa tất cả khoảng trắng không đáng kể (khoảng trắng ranh giới giữa các nút):

  CHỌN CHUYỂN ĐỔI (XML, '& lt; root & gt; & lt; child / & gt; & lt; / root & gt;')
 

Ví dụ này chuyển đổi một chuỗi tương tự có khoảng trắng, văn bản và đánh dấu thành XML đã nhập và giữ nguyên khoảng trắng không đáng kể (khoảng trắng ranh giới giữa các nút):

  CHỌN CHUYỂN ĐỔI (XML, '& lt; root & gt; & lt; child / & gt; & lt; / root & gt;', 1)
 

Ví dụ này chuyển một chuỗi có khoảng trắng, văn bản và đánh dấu thành XML đã nhập:

  SELECT CAST ('& lt; Name & gt; & lt; FName & gt; Carol & lt; / FName & gt; & lt; LName & gt; Elliot & lt; / LName & gt; & lt; / Name & gt;' AS XML)
 

Xem phần Tạo bản sao của dữ liệu XML để biết thêm ví dụ.

Bắt đầu với các giá trị GETDATE () , ví dụ này hiển thị ngày và giờ hiện tại, sử dụng CAST để thay đổi ngày và giờ hiện tại thành kiểu dữ liệu ký tự, sau đó sử dụng CONVERT để hiển thị ngày và giờ ở định dạng ISO 8601 .

  CHỌN
   GETDATE () AS UnconvertedDateTime,
   CAST (GETDATE () AS NVARCHAR (30)) AS usingCast,
   CONVERT (nvarchar (30), GETDATE (), 126) AS usingConvertTo_ISO8601;
ĐI
 

Đây là tập hợp kết quả.

  UnconvertDateTime usingCast usingConvertTo_ISO8601
----------------------- -------------------------- -------------------------
2006-04-18 09: 58: 04.570 18/04/2006 9:58 AM 2006-04-18T09: 58: 04.570

(1 hàng bị ảnh hưởng)
 

Ví dụ này gần như ngược lại với ví dụ trước. Ví dụ này hiển thị ngày và giờ dưới dạng dữ liệu ký tự, sử dụng CAST để thay đổi dữ liệu ký tự thành kiểu dữ liệu datetime , sau đó sử dụng CONVERT để thay đổi dữ liệu ký tự thành kiểu dữ liệu datetime .

 CHỌN
   '2006-04-25T15: 50: 59.997' AS UnconvertedText,
   CAST ('2006-04-25T15: 50: 59.997' AS datetime) AS usingCast,
   CHUYỂN ĐỔI (datetime, '2006-04-25T15: 50: 59.997', 126) AS usingConvertFrom_ISO8601;
ĐI
 

Đây là tập hợp kết quả.

  UnconvertedText usingCast usingConvertFrom_ISO8601
----------------------- -------------------------- --------------------
2006-04-25T15: 50: 59,997 2006-04-25 15: 50: 59,997 2006-04-25 15: 50: 59,997

(1 hàng bị ảnh hưởng)
 

H. Sử dụng CONVERT với dữ liệu nhị phân và ký tự

Những ví dụ này cho thấy kết quả của việc chuyển đổi dữ liệu nhị phân và dữ liệu ký tự, sử dụng các kiểu khác nhau.

  - Chuyển đổi giá trị nhị phân 0x4E616d65 thành giá trị ký tự.
CHỌN CHUYỂN ĐỔI (CHAR (8), 0x4E616d65, 0) AS [Kiểu 0, nhị phân thành ký tự];
 

Đây là tập hợp kết quả.

  Kiểu 0, nhị phân thành ký tự
----------------------------
Tên

(1 hàng bị ảnh hưởng)
 

Ví dụ này cho thấy rằng Kiểu 1 có thể buộc phải cắt bớt kết quả. Các ký tự 0x trong tập hợp kết quả buộc phải cắt bớt.

  CHỌN CHUYỂN ĐỔI (CHAR (8), 0x4E616d65, 1) AS [Kiểu 1, nhị phân thành ký tự];
 

Đây là tập hợp kết quả.

  Kiểu 1, nhị phân thành ký tự
------------------------------
0x4E616D

(1 hàng bị ảnh hưởng)
 

Ví dụ này cho thấy rằng Kiểu 2 không cắt bớt kết quả, vì kết quả không bao gồm các ký tự 0x.

  CHỌN CHUYỂN ĐỔI (CHAR (8), 0x4E616d65, 2) AS [Kiểu 2, nhị phân thành ký tự];
 

Đây là tập hợp kết quả.

  Kiểu 2, nhị phân sang ký tự
------------------------------
4E616D65

(1 hàng bị ảnh hưởng)
 

Chuyển đổi giá trị ký tự 'Tên' thành giá trị nhị phân.

  CHỌN CHUYỂN ĐỔI (BINARY (8), 'Tên', 0) AS [Kiểu 0, ký tự thành nhị phân];
 

Đây là tập hợp kết quả.

  Kiểu 0, ký tự thành nhị phân
----------------------------
0x4E616D6500000000

(1 hàng bị ảnh hưởng)
 
  CHỌN CHUYỂN ĐỔI (BINARY (4), '0x4E616D65', 1) AS [Kiểu 1, ký tự thành nhị phân];
 

Đây là tập hợp kết quả.

  Kiểu 1, ký tự thành nhị phân
----------------------------
0x4E616D65

(1 hàng bị ảnh hưởng)
 
  CHỌN CHUYỂN ĐỔI (BINARY (4), '4E616D65', 2) AS [Kiểu 2, ký tự thành nhị phân];
 

Đây là tập hợp kết quả.

  Kiểu 2, ký tự thành nhị phân
----------------------------------
0x4E616D65

(1 hàng bị ảnh hưởng)
 

Ví dụ này cho thấy việc chuyển đổi các loại dữ liệu ngày, giờ và ngày giờ.

  DECLARE @ d1 DATE, @ t1 TIME, @ dt1 DATETIME;
SET @ d1 = GETDATE ();
SET @ t1 = GETDATE ();
SET @ dt1 = GETDATE ();
SET @ d1 = GETDATE ();
- Khi chuyển đổi ngày thành datetime, phần phút trở thành số không.
CHỌN @ d1 AS [DATE], CAST (@ d1 AS DATETIME) AS [date as datetime];
- Khi chuyển đổi thời gian thành datetime, phần ngày trở thành 0
- chuyển đổi thành ngày 1 tháng 1 năm 1900.
CHỌN @ t1 AS [TIME], CAST (@ t1 AS DATETIME) AS [time as datetime];
- Khi chuyển đổi ngày giờ thành ngày hoặc giờ phần không áp dụng được bỏ.
CHỌN @ dt1 NHƯ [DATETIME], CAST (@ dt1 AS DATE) AS [datetime as date],
   CAST (@ dt1 AS TIME) AS [datetime as time];
 

Bắt đầu với các giá trị GETDATE () , ví dụ này sử dụng CONVERT để hiển thị tất cả các kiểu ngày và giờ trong phần Kiểu ngày và giờ của bài viết này.

Sự sắp xếp #
Truy vấn mẫu
Kết quả mẫu


CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 0)
23 tháng 8, 2019 1:39 CH

1
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 1)
23/08/19

2
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 2)
19.08.23

3
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 3)
23/08/19

4
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 4)
23.08.19

5
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 5)
23-08-19

6
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 6)
23 tháng 8, 19

7
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 7)
23 tháng 8, 19

8 hoặc 24 hoặc 108
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 8)
13:39:17

9 hoặc 109
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 9)
23 tháng 8, 2019 1: 39: 17: 090PM

10
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 10)
23-08-19

11
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 11)
19/08/23

12
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 12)
190823

13 hoặc 113
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 13)
23 tháng 8, 2019 13: 39: 17: 090

14 hoặc 114
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 14)
13: 39: 17: 090

20 hoặc 120
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 20)
2019-08-23 13:39:17

21 hoặc 25 hoặc 121
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 21)
2019-08-23 13: 39: 17.090

22
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 22)
23/08/19 1:39:17 CH

23
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 23)
2019-08-23

101
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 101)
23/08/2019

102
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 102)
2019.08.23

103
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 103)
23/08/2019

104
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 104)
23.08.2019

105
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 105)
23-08-2019

106
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 106)
23 thg 8, 2019

107
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 107)
23 thg 8, 2019

110
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 110)
23 tháng 8 năm 2019

111
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 111)
2019/08/23

112
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 112)
20190823

113
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 113)
23 tháng 8, 2019 13:39: 17.090

120
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 120)
2019-08-23 13:39:17

121
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 121)
2019-08-23 13: 39: 17.090

126
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 126)
2019-08-23T13: 39: 17.090

127
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 127)
2019-08-23T13: 39: 17.090

130
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 130)
22 لحجة الحجة 1440 1: 39: 17.090P

131
CHỌN CHUYỂN ĐỔI (NVARCHAR, GETDATE (), 131)
22/12/1440 1: 39: 17.090PM

K. Ảnh hưởng của mức độ ưu tiên của loại dữ liệu trong các chuyển đổi được phép

Ví dụ sau xác định một biến kiểu VARCHAR, gán một giá trị nguyên cho biến, sau đó chọn một nối của biến với một chuỗi.

  DECLARE @string VARCHAR (10);
SET @string = 1;
SELECT @string + 'là một chuỗi.' AS Kết quả
 

Đây là tập hợp kết quả.

  Kết quả
-----------------------
1 là một chuỗi.
 

Giá trị int của 1 đã được chuyển đổi thành VARCHAR.

Ví dụ này hiển thị một truy vấn tương tự, sử dụng biến int thay thế:

  KHAI BÁO @notastring INT;
SET @notastring = '1';
SELECT @notastring + 'không phải là một chuỗi.' AS Kết quả
 

Trong trường hợp này, câu lệnh SELECT sẽ gây ra lỗi sau:

  Msg 245, Level 16, State 1, Line 3
Chuyển đổi không thành công khi chuyển đổi giá trị varchar 'không phải là một chuỗi.' sang kiểu dữ liệu int.
 

Để đánh giá biểu thức @notastring + 'không phải là một chuỗi.' , SQL Server cần tuân theo các quy tắc về mức độ ưu tiên của kiểu dữ liệu để hoàn thành chuyển đổi ngầm định trước khi kết quả của biểu thức có thể được tính toán. Bởi vì int có mức độ ưu tiên cao hơn VARCHAR, SQL Server cố gắng chuyển đổi chuỗi thành số nguyên và không thành công vì chuỗi này không thể chuyển đổi thành số nguyên.

Nếu chúng tôi cung cấp một chuỗi có thể được chuyển đổi, thì câu lệnh sẽ thành công, như trong ví dụ sau:

  DECLARE @notastring INT;
SET @notastring = '1';
CHỌN @notastring + '1'
 

Trong trường hợp này, chuỗi '1' có thể được chuyển đổi thành giá trị nguyên 1, vì vậy câu lệnh SELECT này sẽ trả về giá trị 2. Khi các kiểu dữ liệu được cung cấp là số nguyên, toán tử + sẽ trở thành thêm toán tử toán học, thay vì nối chuỗi.

Ví dụ: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

L. Sử dụng CAST và CONVERT

Ví dụ này truy xuất tên của sản phẩm cho những sản phẩm có 3 ở chữ số đầu tiên của giá niêm yết và chuyển đổi ListPrice của những sản phẩm này thành < strong> int . Nó sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

  CHỌN EnglishProductName AS ProductName, ListPrice
TỪ dbo.DimProduct
WHERE CAST (ListPrice AS int) LIKE '3%';
 

Ví dụ này hiển thị cùng một truy vấn, sử dụng CONVERT thay vì CAST. Nó sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

  CHỌN EnglishProductName AS ProductName, ListPrice
TỪ dbo.DimProduct
CHUYỂN ĐỔI NÀO (INT, ListPrice) THÍCH '3%';
 

M. Sử dụng CAST với các toán tử số học

Ví dụ này tính toán một giá trị cột đơn lẻ bằng cách chia đơn giá sản phẩm ( UnitPrice ) cho phần trăm chiết khấu ( UnitPriceDiscountPct ). Kết quả này sau đó được làm tròn thành số nguyên gần nhất và cuối cùng được chuyển đổi thành kiểu dữ liệu int . Ví dụ này sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

 CHỌN ProductKey, UnitPrice, UnitPriceDiscountPct,
       CAST (ROUND (UnitPrice * UnitPriceDiscountPct, 0) AS int) AS Giảm giá
TỪ dbo.FactResellerSales
WHERE SalesOrderNumber = 'SO47355'
      VÀ UnitPriceDiscountPct & gt; .02;
 

Đây là tập hợp kết quả.

  ProductKey UnitPrice UnitPriceDiscountPct Giảm giá
---------- --------- ----------------------------- -
323 430,6445 0,05 22
213 18,5043 0,05 1
456 37,4950 0,10 4
456 37,4950 0,10 4
216 18,5043 0,05 1
 

N. Sử dụng CAST với mệnh đề LIKE

Ví dụ này chuyển đổi cột money ListPrice thành loại int và sau đó thành char (20) > gõ, để mệnh đề LIKE có thể sử dụng nó. Ví dụ này sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

  CHỌN EnglishProductName AS Name, ListPrice
TỪ dbo.DimProduct
WHERE CAST (CAST (ListPrice AS INT) AS CHAR (20)) THÍCH '2%';
 

Ví dụ này hiển thị ngày và giờ hiện tại, sử dụng CAST để thay đổi ngày và giờ hiện tại thành kiểu dữ liệu ký tự và cuối cùng sử dụng CONVERT hiển thị ngày và giờ ở định dạng ISO 8601. Ví dụ này sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

  CHỌN HÀNG ĐẦU (1)
   SYSDATETIME () AS UnconvertedDateTime,
   CAST (SYSDATETIME () AS NVARCHAR (30)) AS usingCast,
   CHUYỂN ĐỔI (NVARCHAR (30), SYSDATETIME (), 126) NHƯ Sử dụngConvertTo_ISO8601
TỪ dbo.DimCustomer;
 

Đây là tập hợp kết quả.

  UnconvertDateTime usingCast usingConvertTo_ISO8601
----------------------------- - -------------------------
20/07/2010 1:44:31 PM 2010-07-20 13: 44: 31.5879025 2010-07-20T13: 44: 31.5879025
 

Ví dụ này hoàn toàn trái ngược với ví dụ trước. Ví dụ này hiển thị ngày và giờ dưới dạng dữ liệu ký tự, sử dụng CAST để thay đổi dữ liệu ký tự thành kiểu dữ liệu datetime và sau đó sử dụng CONVERT để thay đổi dữ liệu ký tự thành datetime loại dữ liệu. Ví dụ này sử dụng cơ sở dữ liệu AdventureWorksDW2016 .

  CHỌN HÀNG ĐẦU (1)
   '2010-07-25T13: 50: 38.544' AS UnconvertedText,
CAST ('2010-07-25T13: 50: 38.544' AS DATETIME) AS usingCast,
   CHUYỂN ĐỔI (DATETIME, '2010-07-25T13: 50: 38.544', 126) AS usingConvertFrom_ISO8601
TỪ dbo.DimCustomer;
 

Đây là tập hợp kết quả.

  UnconvertedText usingCast usingConvertFrom_ISO8601
----------------------- -------------------------- --------------------
2010-07-25T13: 50: 38.544 25/07/2010 1:50:38 CH 25/07/2010 1:50:38 CH
 

Xem thêm

Mức độ ưu tiên của kiểu dữ liệu (Transact-SQL)
Chuyển đổi loại dữ liệu (Công cụ cơ sở dữ liệu)
ĐỊNH DẠNG (Giao dịch-SQL)
STR (Giao dịch-SQL)
CHỌN (Giao dịch-SQL)
Chức năng Hệ thống (Giao dịch-SQL)
Đối chiếu và Hỗ trợ Unicode
Viết câu lệnh SQL giao dịch quốc tế


Xem thêm những thông tin liên quan đến chủ đề máy chủ sql chuyển đổi 120

Cài đặt SQL Server 2019

  • Tác giả: thân triệu
  • Ngày đăng: 2020-10-30
  • Đánh giá: 4 ⭐ ( 6785 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Link tải: https://www.microsoft.com/en-us/sql-server/sql-server-downloads

Khắc phục: Hiệu suất trên máy chủ SQL Server 2012 liên kết khi bạn cập nhật dữ liệu cùng với các đối chiếu khác trên máy chủ từ xa

  • Tác giả: support.microsoft.com
  • Đánh giá: 4 ⭐ ( 1499 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khắc phục sự cố hiệu suất chậm trên máy chủ SQL Server 2012 liên kết khi bạn cập nhật dữ liệu cùng với các đối chiếu khác trên máy chủ từ xa.

Chuyển đổi SQL trực tuyến: chuyển đổi tập tin từ và sang SQL

  • Tác giả: anyconv.com
  • Đánh giá: 3 ⭐ ( 1740 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: AnyConv là trình chuyển đổi SQL trực tuyến - chuyển đổi tệp từ và sang SQL miễn phí trong vài giây. Chuyển đổi SQL bây giờ thật dễ dàng!

Chuỗi máy chủ Sql để chuyển đổi ngày

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 1858 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] SQL Server (2005, 2000, 7.0) không có bất kỳ cách linh hoạt hoặc thậm chí không…

Không chọn đúng máy chủ SQL khi tạo mới, chuyển đổi, cập nhật dữ liệu

  • Tác giả: helpsme.misa.vn
  • Đánh giá: 5 ⭐ ( 2468 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Chuyển đổi dữ liệu cho dịch vụ tích hợp máy chủ SQL (SSIS)

  • Tác giả: helpex.vn
  • Đánh giá: 4 ⭐ ( 8226 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong loạt bài học từng bước về SSIS (Dịch vụ tích hợp máy chủ SQL), đây là phần sáu, trong đó chúng ta sẽ tìm hiểu một cách điều khiển mới: Chuyển đổi dữ liệu. Tôi chắc chắn rằng chỉ bằng…

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình