Làm cách nào để lấy Thời gian từ định dạng DateTime trong SQL?


182

Tôi muốn chỉ nhận Thời gian từ cột DateTime bằng truy vấn SQL bằng SQL Server 2005 và 2008 Đầu ra mặc định:

AttDate                   
==
2011-02-09 13:09:00    
2011-02-09 14:10:00    

Tôi muốn đầu ra này:

AttDate                Time 
==
2011-02-09 13:09:00    13:09
2011-02-09 14:10:00    14:10

tìm kiếm phương thức to_char trong sql. bạn có thể chỉ định định dạng và nhận đầu ra mong muốn
Naveen Babu

1
chọn convert (varchar (10), getdate (), 108)
rahularyansharma

Nó có thể SELECT CONVERT(VARCHAR(8),GETDATE(),108)dành cho máy chủ sql
V4Vendetta

Câu trả lời:


342

Máy chủ SQL 2008:

SELECT cast(AttDate as time) [time]
FROM yourtable

Các phiên bản trước:

SELECT convert(char(5), AttDate, 108) [time]
FROM yourtable

34

Giả sử máy chủ Sql

SELECT CONVERT(VARCHAR(8),GETDATE(),108)


Nó chỉ hoạt động trên getdate () trong đó khi tôi vượt qua select convert (varchar (8), '2011 / 02-09 13: 09: 00', 108), nó tạo ra 8 ký tự đầu tiên kể từ ngày. Cách khắc phục ?
Aparna

24

SQL Server 2008+ có kiểu dữ liệu "thời gian"

SELECT 
    ..., CAST(MyDateTimeCol AS time)
FROM
   ...

Đối với các phiên bản cũ hơn, không có chuyển đổi varchar

SELECT 
    ..., DATEADD(dd, DATEDIFF(dd, MyDateTimeCol, 0), MyDateTimeCol)
FROM
   ...

tại sao bạn không sử dụng CHUYỂN ĐỔI CHỌN (VARCHAR (8), GETDATE (), 108) NHƯ HourMinuteSecond, CONVERT (VARCHAR (8), GETDATE (), 101) AS DateOnly có vấn đề về hiệu suất không?
rahularyansharma

2
@rahularyansharma: Tôi không sử dụng chuyển đổi varchar cho ngày nếu cần
gbn

Thưa ông, tôi muốn biết có giảm hiệu suất nếu chúng tôi sử dụng thay vì giải pháp của bạn không?
rahularyansharma

1
@rahularyansharma: bạn có thể tự kiểm tra dựa trên stackoverflow.com/questions/133081/iêu
gbn

1
Đối với bất cứ ai không theo dõi, 0đại diện cho ngày tối thiểu 1900-01-01. Vì vậy, điều này nhận được số ngày (âm) giữa giá trị cột và 0, sau đó thêm các ngày âm đó vào giá trị cột làm "hết" phần ngày 1900-01-01và bạn chỉ còn lại thời gian.
xr280xr

13

Cách đơn giản nhất để lấy thời gian từ datetime mà không cần mili giây là:

SELECT convert(time(0),getDate())

10

Hãy thử sử dụng cái này

  • Ngày đến giờ

    select cast(getdate() as time(0))
  • Thời gian để TinyTime

    select cast(orig_time as time(0))

5

Thử cái này:

select  convert(nvarchar,CAST(getdate()as time),100)


3

select AttDate,convert(char(5), AttDate, 108) [Time] from yourTableName


3
select cast (as time(0))

sẽ là một điều khoản tốt. Ví dụ:

(select cast(start_date as time(0))) AS 'START TIME'

3

Tôi thường sử dụng tập lệnh này để lấy Thời gian từ DateTime:

SELECT CONVERT(VARCHAR(9),RIGHT(YOURCOLUMN_DATETIME,9),108) FROM YOURTABLE

tại sao tôi nhận được 9 trước thời gian .. Kết quả: 9 11:21 PM
Muhammad nói


2

Nếu bạn muốn hẹn hò với một cái gì đó theo phong cách này: ngày 23 tháng 10 năm 2013 10:30 sáng

Dùng cái này

SELECT CONVERT(NVARCHAR(30),getdate(), 100)

convert() phương thức có 3 tham số

  1. loại dữ liệu
  2. Cột / Giá trị
  3. Kiểu: Kiểu có sẵn là từ 100 đến 114. Bạn có thể chọn trong phạm vi từ. Chọn từng cái một để thay đổi định dạng ngày.

2

Nhận ngày của máy chủ

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) FROM TABLENAME WHERE ...

hoặc là

Nếu nó được lưu trữ trong bảng

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), datename, 100), 7)) FROM TABLENAME WHERE ...

Kết quả:

11:41 sáng


1
select convert(char(5), tbl_CustomerBooking.CheckInTime, 108) AS [time]
from tbl_CustomerBooking

1

trên MSSQL2012 trở lên

cast(dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) as Time(0))

...hoặc là...

convert(time(0),dateadd(ms,datediff(ms, [StartDateTime], [StopDateTime]),0) )

1

Máy chủ SQL 2012:

Select TRY_CONVERT(TIME, myDateTimeColumn) from myTable;

Cá nhân, tôi thích TRY_CONVERT () hơn CONVERT (). Sự khác biệt chính: Nếu truyền không thành công, TRY_CONVERT () trả về NULL trong khi CONVERT () phát sinh lỗi.


-1

select substr(to_char(colUmn_name, 'DD/MM/RRRR HH:MM:SS'),11,19) from table_name;

Đầu ra: từ

05:11:26
05:11:24
05:11:24

Không hoạt động gây ra lỗi'to_char' is not a recognized built-in function name.
Captainsac
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.