Nếu bạn làm việc với SQL Server, rất có thể bạn đã sử dụng ít nhất một trong các CONVERT()
hoặc CAST()
các hàm chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác. Nếu bạn đã từng gặp lỗi khi cố gắng chuyển đổi một chuỗi thành kiểu dữ liệu ngày / giờ, thì PARSE()
chức năng có thể là những gì bạn cần.
Ví dụ:nếu bạn có một chuỗi như nói, Thứ sáu, ngày 20 tháng 7 năm 2018 , CONVERT()
hoặc CAST()
các hàm sẽ báo lỗi. Nhưng PARSE()
chức năng sẽ xử lý nó mà không có vấn đề gì.
PARSE()
hàm trả về kết quả của một biểu thức, được dịch sang kiểu dữ liệu được yêu cầu trong SQL Server. Vì vậy, bạn có thể sử dụng nó để “dịch” giá trị chuỗi của mình thành một kiểu dữ liệu ngày / giờ (chẳng hạn như ngày , ngày giờ , datetime2 , v.v.).
Cú pháp
Đây là cú pháp cho PARSE()
chức năng:
PARSE ( string_value AS data_type [ USING culture ] )
Ở đâu string_value
là giá trị bạn muốn được phân tích cú pháp, data_type
là kiểu dữ liệu bạn muốn nó được phân tích cú pháp và culture
là một đối số tùy chọn mà bạn có thể sử dụng để chỉ định định dạng ngôn ngữ sẽ sử dụng khi phân tích cú pháp chuỗi.
Ví dụ cơ bản
Đây là một ví dụ cơ bản để chứng minh cách sử dụng.
SELECT PARSE('Friday, 20 July 2018' AS datetime2) AS 'Result';
Kết quả:
+-----------------------------+ | Result | |-----------------------------| | 2018-07-20 00:00:00.0000000 | +-----------------------------+
Xóa phần thời gian
Trong ví dụ trước, chúng tôi đã chỉ định rằng chuỗi phải được phân tích cú pháp thành datetime2 loại dữ liệu. Kiểu dữ liệu này bao gồm thành phần thời gian có độ chính xác cao. Nếu bạn không cần thành phần thời gian, bạn luôn có thể phân tích cú pháp thành ngày kiểu dữ liệu.
Đây là kết quả nếu chúng tôi chỉ định ngày kiểu dữ liệu:
SELECT PARSE('Friday, 20 July 2018' AS date) AS 'Result';
Kết quả:
+------------+ | Result | |------------| | 2018-07-20 | +------------+
Giữ nguyên phần thời gian nhưng ít chính xác hơn
Và nếu bạn làm cần thời gian, nhưng với độ chính xác thấp hơn, bạn luôn có thể sử dụng smalldatetime kiểu dữ liệu:
SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) AS 'Result';
Kết quả:
+---------------------+ | Result | |---------------------| | 2018-07-20 14:36:00 | +---------------------+
Nhưng nếu điều đó không đủ chính xác, luôn có ngày giờ kiểu dữ liệu:
SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) AS 'Result';
Kết quả:
+-------------------------+ | Result | |-------------------------| | 2018-07-20 14:35:50.523 | +-------------------------+
Các biến thể của Nhập ngày
PARSE()
chức năng thường có thể tính ra ngày bạn đang cố gắng chuyển đổi, miễn là bạn cung cấp nó dưới dạng đại diện hợp lệ của loại dữ liệu được yêu cầu. Dưới đây là một số ví dụ về ngày tháng được cung cấp theo nhiều kiểu khác nhau:
SELECT PARSE('Friday, 20 July 2018' AS date) AS 'Result 1', PARSE('Fri, 20 July 2018' AS date) AS 'Result 2', PARSE('Friday, July 20 2018' AS date) AS 'Result 3', PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';
Kết quả:
+------------+------------+------------+------------+ | Result 1 | Result 2 | Result 3 | Result 4 | |------------+------------+------------+------------| | 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 | +------------+------------+------------+------------+
Tuy nhiên, nó không phải là tâm linh:
SELECT PARSE('Next Friday' AS date) AS 'Result';
Kết quả:
Error converting string value 'Next Friday' into data type date using culture ''.
Thêm văn hóa
Bạn có thể thêm đối số thứ ba để chỉ định chuỗi của bạn được định dạng theo văn hóa nào. Ví dụ:nếu ngày của bạn là 01/06/2018
, điều này có thể có nghĩa là ngày 6 tháng 1 năm 2018 hoặc ngày 1 tháng 6 năm 2018 , tùy thuộc vào nền văn hóa đang được sử dụng.
Dưới đây là một ví dụ về việc xác định văn hóa:
SELECT PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US', PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';
Kết quả:
+------------+------------+ | en-US | en-GB | |------------+------------| | 2018-01-06 | 2018-06-01 | +------------+------------+
Nếu bạn không cung cấp đối số này, ngôn ngữ của phiên hiện tại sẽ được sử dụng.
Cung cấp ngày trong tuần không chính xác
PARSE()
chức năng này khá thông minh, ở chỗ, nếu bạn cung cấp sai ngày trong tuần, nó sẽ trả về lỗi.
Vì vậy, nếu chúng ta sử dụng cùng một ngày với các ví dụ trước, nhưng chúng ta thay đổi ngày trong tuần từ Thứ Sáu sang Thứ Năm, thì đây là điều sẽ xảy ra:
SELECT PARSE('Thursday, 20 July 2018' AS date) AS 'Result';
Kết quả:
Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.