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

Cách thêm AM / PM vào giá trị thời gian trong SQL Server (T-SQL)

Trong SQL Server, bạn có thể sử dụng T-SQL FORMAT() chức năng định dạng thời gian loại dữ liệu. Tuy nhiên, nếu bạn cần thêm bộ chỉ định AM / PM, bạn sẽ cần sử dụng một loại dữ liệu khác. Điều này là do thời gian kiểu dữ liệu cụ thể dựa trên đồng hồ 24 giờ và do đó thời gian được định dạng như vậy.

Ví dụ 1 - So sánh "time" với "datetime"

Dưới đây là một ví dụ để chứng minh điều gì sẽ xảy ra nếu bạn cố gắng định dạng loại dữ liệu "thời gian" bằng trình chỉ định AM / PM:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime',
  FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';

Kết quả:

+------------+--------+
| datetime   | time   |
|------------+--------|
| 11:28 AM   | NULL   |
+------------+--------+

Nếu bạn cố gắng thêm bộ chỉ định AM / PM vào giá trị 'thời gian', bạn sẽ nhận được NULL .

Do đó, nếu bạn cần thêm SA hoặc CH vào một kiểu dữ liệu thời gian, trước tiên bạn cần chuyển đổi nó sang một kiểu dữ liệu khác, sau đó định dạng nó.

Lưu ý rằng FORMAT() hàm thực sự trả về kết quả dưới dạng một chuỗi (trừ khi kết quả là NULL ).

Nếu bạn đang thắc mắc tại sao lại có dấu gạch chéo ngược trong chuỗi định dạng thứ hai, thì điều này chỉ bắt buộc đối với thời gian kiểu dữ liệu và nó được sử dụng để thoát khỏi dấu hai chấm (và bất kỳ dấu chấm nào). Tìm hiểu thêm về điều đó tại đây.

Ví dụ 2 - Chuyển đổi "time" thành "datetime"

Ví dụ này gần giống với ví dụ trước, ngoại trừ tôi cố gắng làm cho điều này thực tế hơn. Trong phần này, tôi đặt một cách rõ ràng một biến làm kiểu dữ liệu 'thời gian' và sau đó cố gắng định dạng biến đó. Sau đó, tôi chuyển nó thành 'datetime' trước khi định dạng lại.

DECLARE @thetime time = '11:28:15'
SELECT 
  FORMAT(@thetime, 'hh\:mm tt') 'time',
  FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';

Kết quả:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Nếu bạn thích sử dụng CONVERT() chức năng, đây là những gì sẽ trông như thế nào:

DECLARE @thetime time = '11:28:15'
SELECT 
  FORMAT(@thetime, 'hh\:mm tt') 'time',
  FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';

Kết quả:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Hoặc bạn có thể chỉ định lại giá trị cho một biến khác thuộc loại mong muốn:

DECLARE @thetime time = '11:28:15'
DECLARE @thedatetime datetime = @thetime
SELECT 
  FORMAT(@thetime, 'hh\:mm tt') 'time',
  FORMAT(@thedatetime, 'hh:mm tt') 'datetime';

Kết quả:

+--------+------------+
| time   | datetime   |
|--------+------------|
| NULL   | 11:28 AM   |
+--------+------------+

Ví dụ 3 - Người thiết kế AM / PM Single Letter

Bạn cũng có thể sử dụng một t để chỉ định một chữ cái AM / PM chỉ định:

SELECT 
  FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM',
  FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';

Kết quả:

+---------+---------+
| AM      | PM      |
|---------+---------|
| 11:28 A | 11:28 P |
+---------+---------+

Ví dụ 4 - Không sử dụng hàm FORMAT ()

FORMAT() đã được giới thiệu trong SQL Server 2012. Nếu bạn sử dụng phiên bản SQL Server cũ hơn, bạn sẽ cần sử dụng một phương pháp khác để thêm bộ chỉ định AM / PM. Đây là một cách bạn có thể làm điều đó:

DECLARE @thetime time
SET @thetime = '11:28:15'
SELECT CONVERT(varchar(8), @thetime, 100) Result;

Kết quả:

+----------+
| Result   |
|----------|
| 11:28AM  |
+----------+

Ngoài ra, bạn có thể sử dụng thay thế 100 với 0 cho cùng một kết quả:

DECLARE @thetime time
SET @thetime = '11:28:15'
SELECT CONVERT(varchar(8), @thetime, 0) Result;

Kết quả:

+----------+
| Result   |
|----------|
| 11:28AM  |
+----------+

  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 ‘datetimeoffset’ thành ‘time’ trong SQL Server (Ví dụ T-SQL)

  2. Làm cách nào để chọn dữ liệu của một bảng từ một cơ sở dữ liệu khác trong SQL Server?

  3. MONTH () Ví dụ trong SQL Server (T-SQL)

  4. Thu thập dữ liệu hiệu suất bằng công cụ SQLDiag | Khắc phục sự cố hiệu suất máy chủ SQL -6

  5. Cấu hình theo phạm vi cơ sở dữ liệu SQL Server và sửa kế hoạch tự động