مساعدة بيان SQL - اختر والعملاء الذين أمروا اليوم
سؤال
ويقول لدي الجدول الذي يخزن عملاء النظام معرفات. مثل
و| ID العميل | ID أجل | الترتيب التاريخ
وكيف يمكنني الحصول على جميع العملاء الذين أمروا اليوم؟
وأيضا أن تاريخ الطلب يكون التاريخ والوقت.
وشيء من هذا القبيل
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate > Today
ولكن الجزء الأخير هو ما لا أستطيع معرفة.
المحلول
وإنه أمر شائع إلى حد ما تريد فقط موعد للخروج من التاريخ والوقت - يجب أن تكون قادرة على Google للتفاصيل RDBMS الخاص بك (منذ كنت لا أذكر ذلك). بت المهم هو جعل طلبك SARGable عن طريق تحويل اليوم م> تاريخ <سوب> 1 سوب> - لا تاريخ الطلب
لMSSQL، شيء من هذا القبيل
SELECT DISTINCT CustomerID
FROM TableName
--I assume you want midnight orders as well - so use >=
Where OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
وسيعمل من خلال اتخاذ عدد من أيام اليوم هو من 0 تاريخ (DATEDIFF(dd, 0, GETDATE())
) وإضافتها إلى التسجيل 0 (DATEADD(dd, 0, x)
). هذا T-SQL محددة، بالرغم من ذلك.
<سوب> 1 سوب> إذا كنت تبحث عن موعد التعسفي، وكنت لا تزال تحول كل من الحجج:
SELECT DISTINCT CustomerID
FROM TableName
Where
OrderDate >= DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))
--You *do not* want midnight of the next day, as it would duplicate orders
AND OrderDate < DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()) + 1)
نصائح أخرى
في أوراكل البيان ان تبدو شيئا مثل:
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate >= trunc(sysdate)
وSQL خادم يجب أن تكون مشابهة
SELECT DISTINCT CustomerID
FROM TableName
Where OrderDate = CAST(GetDate() AS NUMERIC)
وOR
SELECT DISTINCT CustomerID
FROM TableName
Where CAST(OrderDate AS NUMERIC) = CAST(GetDate() AS NUMERIC)
ولقد حاولت أن نرى أن تقوم بإرجاع نفس العدد لتاريخ معين في زمن مختلف. لذلك، يجب أن يعمل عندما يتم تحويل التاريخ إلى قيمته الرقمية.
وSELECT CAST(0 AS DATETIME)
يعود 1/1/1900 0:00:00