Truy vấn sql DateTime đơn giản


83

Làm cách nào để truy vấn trường cơ sở dữ liệu DateTime trong một phạm vi nhất định?

Tôi đang sử dụng SQL SERVER 2005

Mã lỗi bên dưới

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM

Lưu ý rằng tôi cần lấy hàng trong một khoảng thời gian nhất định. Ví dụ, phạm vi thời gian 10 phút.

Hiện tại trả về SQL với cú pháp không chính xác gần '12'. "


2
Câu trả lời của clyc là đúng: bạn cần thêm dấu ngoặc kép. Tôi đã mắc lỗi này trước đây, bởi vì nếu bạn làm where date = 1/12/2011như vậy, ví dụ, nó sẽ có vẻ hoạt động, nhưng thực tế chia 1/12/2011 và lấy số 0, sau đó coi số 0 là giá trị ngày giờ tối thiểu có thể.
John Gibb

Câu trả lời:


116

Bạn đã bỏ lỡ dấu nháy đơn:

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

Ngoài ra, bạn nên sử dụng định dạng ISO8601 YYYY-MM-DDThh: mm: ss.nnn [Z], vì định dạng này sẽ không phụ thuộc vào văn hóa cục bộ của máy chủ của bạn.

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'

Không hoạt động tốt Msg 242, Mức 16, Trạng thái 3, Dòng 1 Việc chuyển đổi kiểu dữ liệu char thành kiểu dữ liệu datetime dẫn đến giá trị datetime nằm ngoài phạm vi.
ove

@overule - hãy thử sử dụng ví dụ thứ hai
Alex Aza

@overule - ngoài ra, hãy đảm bảo rằng cột của bạn có loại ngày giờ.
Alex Aza

3
@Eric - yyyymmdd không có thời gian.
Alex Aza

8

Bạn cần dấu ngoặc kép xung quanh chuỗi mà bạn đang cố chuyển sang ngày tháng và bạn cũng có thể sử dụng GIỮA tại đây:

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

Xem câu trả lời cho câu hỏi sau để biết ví dụ về cách chuyển đổi rõ ràng chuỗi thành ngày tháng trong khi chỉ định định dạng:

Chuỗi máy chủ Sql sang ngày chuyển đổi


Lỗi tương tự như trên. Bản tin thứ 242, Mức 16, Trạng thái 3, Dòng 1 Việc chuyển đổi kiểu dữ liệu char thành kiểu dữ liệu ngày giờ dẫn đến giá trị ngày giờ nằm ​​ngoài phạm vi. Tôi thực sự bối rối.
ove

ồ, tôi vừa sao chép thời gian ngày tháng của bạn, bạn đã có ngày 25/05 nhưng có lẽ nó đang mong đợi tháng / ngày vì vậy hãy chuyển đổi cả hai. Tôi đã chỉnh sửa câu trả lời của mình và liên kết đến một câu hỏi hay ở đây trên SO cho biết cách chuyển đổi chuỗi thành ngày một cách rõ ràng
Milimetric

6

Điều này đã làm việc cho tôi trong cả SQL Server 2005 và 2008:

SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
  AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}

5

Bạn có thể thực thi mã dưới đây

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14

1
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

Nếu điều này không hiệu quả, vui lòng viết bảng của bạn và đăng nó ở đây. điều này sẽ giúp chúng tôi nhanh chóng đưa ra câu trả lời chính xác cho bạn.


1
select getdate()

O/P
----
2011-05-25 17:29:44.763

select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'

O/P
---
22/06/1432  5:29:44:763PM

1

Những người khác đã nói rằng các ký tự ngày tháng trong SQL Server yêu cầu phải được bao quanh bằng các dấu ngoặc kép, nhưng tôi muốn nói thêm rằng bạn có thể giải quyết vấn đề kết hợp tháng / ngày của mình theo hai cách (đó là, vấn đề trong đó 25 được coi là tháng và 5 ngày) :

  1. Sử dụng một cách rõ ràng Convert(datetime, 'datevalue', style)trong đó kiểu là một trong các mã kiểu số, xem Truyền và chuyển đổi . Tham số kiểu không chỉ để chuyển đổi ngày tháng thành chuỗi mà còn để xác định cách chuỗi được phân tích cú pháp thành ngày tháng.

  2. Sử dụng định dạng độc lập theo vùng cho các ngày được lưu trữ dưới dạng chuỗi. Cái tôi sử dụng là 'yyyymmdd hh: mm: ss', hoặc xem xét định dạng ISO , yyyy-mm-ddThh:mi:ss.mmm. Dựa trên thử nghiệm, KHÔNG có chuỗi định dạng ngôn ngữ bất biến khác. (Mặc dù tôi nghĩ rằng bạn có thể bao gồm múi giờ ở cuối, hãy xem liên kết ở trên).


0

Mở Tệp Access mà bạn đang cố gắng xuất dữ liệu SQL sang. Xóa bất kỳ Truy vấn nào ở đó. Mỗi khi bạn chạy trình hướng dẫn Nhập SQL Server, ngay cả khi không thành công, nó sẽ tạo ra một Truy vấn trong Access DB phải bị xóa trước khi bạn có thể chạy lại Trình hướng dẫn xuất SQL.

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.