Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách chuyển đổi chuỗi thành ngày / giờ trong SQL Server bằng cách sử dụng PARSE ()

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 ''.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi định dạng Ngày thành định dạng DD / MMM / YYYY trong SQL Server

  2. Cách lấy OBJECT_NAME () từ Cơ sở dữ liệu khác trong SQL Server

  3. Chèn trình kích hoạt Cập nhật cách xác định xem chèn hoặc cập nhật

  4. Truy vấn SQL để chọn một chuỗi giữa hai chuỗi đã biết

  5. Sự khác biệt giữa cơ sở dữ liệu và lược đồ