2009-05-04 51 views

Trả lời

8

Nói chung, tập các timestamps không phải là well-ordered, điều này có nghĩa là bạn không thể có được một dấu thời gian "cuối cùng" mà bán thời gian lên đến phút là 2009-05-06 14:58.

Trong SQL Server, mà giữ một phần thời gian của một datetime như một số 1/300 phân số thứ hai sau nửa đêm, điều này timestamp "cuối cùng" sẽ là 2009-05-06 14:58:59.997, nhưng điều này không đảm bảo tương thích với các phiên bản tương lai của với TIMESTAMP lưu trữ khác phương pháp.

Điều đó có nghĩa bạn sẽ cần phải chia tình trạng BETWEEN của bạn thành hai điều kiện, một trong số đó là strict less hơn phút tiếp theo:

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog 
where Date >= '2009-05-04 00:00:00' 
     AND Date < DATEADD(minute, 1, '2009-05-06 14:58') 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page,Date order by [VisitingCount] asc 

Giải pháp này có hiệu quả sẽ sử dụng chỉ số trên Date

1

Đối với điều này nhu cầu cụ thể, bạn nên sử dụng phương pháp giữa như được ghi chú bởi Quassnoi's answer. Tuy nhiên, vấn đề chung có thể được giải quyết với:

select dateadd(second, -datepart(second, @date), @date) 
1

Tôi không nghĩ rằng có chức năng được tích hợp sẵn; thường làm một cái gì đó như thế này

SET @time = '07:45' 
SET @date = CONVERT(DATETIME,@time) 
SELECT @date 

SELECT LEFT(CONVERT(VARCHAR,@date,108),5) 
4
SELECT Convert(varchar(5), GetDate(), 108) 

Sử dụng varchar (5) sẽ tự động cắt ngắn ngày để loại bỏ các giây.

19

CONVERT(VARCHAR(5),Date, 108) - Gets chỉ HH:mm

+0

Mã của bạn hoạt động chính xác –

1

Một cách sẽ được sử dụng RIGHT() để cắt ngày. Một cái gì đó như:

RIGHT(CONVERT(VARCHAR(8),Date, 108),5) 

Điều này sẽ chỉ hoạt động nếu số ký tự không đổi, ví dụ: có một số không nếu có. (Xin lỗi, không có máy chủ SQL ở đây để kiểm tra).

Cách tốt hơn là sử dụng T-SQL datepart chức năng để chia và sau đó tái concatinate những phần cập nhật để:

DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108)) 

Tài liệu tham khảo:

http://msdn.microsoft.com/en-us/library/ms174420.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx
http://msdn.microsoft.com/en-us/library/ms177532.aspx

0

Để nhận định dạng hh: mm kể từ ngày hôm nay:

select getdate() 

select convert(varchar(5),getdate(),108) 

Để có được hh: mm từ bất kỳ cột datetime trong một bảng dữ liệu:

select date_time_column_name from table_name where column_name = 'any column data name' 

select convert(varchar(5),date_time_column_name,108) from table_name 
where column_name = 'any column data name' 

select creationdate from employee where Name = 'Satya' 

select convert(varchar(5),creationdate,108) from employee 
where Name = 'Satya' 
0
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5)) 
+0

Trong khi mã chỉ câu trả lời có thể giải quyết vấn đề ban đầu, nó sẽ giúp người khác đọc câu trả lời của bạn nếu bạn đưa ra một số nhận xét/giải thích như những gì bạn đang làm và tại sao. –

Các vấn đề liên quan