Tôi đang cô:
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
giống như: 2010-03-04 00:00:00.000
Tuy nhiên, điều này không hoạt động.
Bất cứ ai có thể cung cấp một tài liệu tham khảo cho lý do tại sao?
Tôi đang cô:
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
giống như: 2010-03-04 00:00:00.000
Tuy nhiên, điều này không hoạt động.
Bất cứ ai có thể cung cấp một tài liệu tham khảo cho lý do tại sao?
Câu trả lời:
select *
from dbo.March2010 A
where A.Date >= Convert(datetime, '2010-04-01' )
Trong truy vấn của bạn, 2010-4-01
được coi là một biểu thức toán học, vì vậy về bản chất nó đọc
select *
from dbo.March2010 A
where A.Date >= 2005;
( 2010 minus 4 minus 1 is 2005
Chuyển đổi nó thành phù hợp datetime
và sử dụng dấu ngoặc đơn sẽ khắc phục vấn đề này.)
Về mặt kỹ thuật, trình phân tích cú pháp có thể cho phép bạn thoát khỏi
select *
from dbo.March2010 A
where A.Date >= '2010-04-01'
nó sẽ thực hiện chuyển đổi cho bạn, nhưng theo tôi thì nó ít đọc hơn là chuyển đổi rõ ràng sang một DateTime
lập trình viên bảo trì sẽ đến sau bạn.
SET LANGUAGE FRENCH
. :-) Vào ngày đó, bạn sẽ nhận được ngày 4 tháng 1 thay vì ngày 1 tháng 4.
CONVERT(datetime, '20100401 10:01:01')
- vượt qua 2010-04-01 hoạt động trong SQL Server Management Studio nhưng không gửi khi gửi câu lệnh SQL qua PHP / MSSQL.
Hãy thử đính kèm ngày của bạn vào một chuỗi ký tự.
select *
from dbo.March2010 A
where A.Date >= '2010-04-01';
Chúng ta có thể sử dụng như dưới đây là tốt
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Date) >= '2017-03-22';
SELECT *
FROM dbo.March2010 A
WHERE CAST(A.Date AS Datetime) >= '2017-03-22 06:49:53.840';
DateTime start1 = DateTime.Parse(txtDate.Text);
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= start1;
Đầu tiên chuyển đổi TexBox thành Datetime sau đó .... sử dụng biến đó vào Truy vấn