مساعدة بيان SQL - اختر والعملاء الذين أمروا اليوم

StackOverflow https://stackoverflow.com/questions/1203826

  •  05-07-2019
  •  | 
  •  

سؤال

ويقول لدي الجدول الذي يخزن عملاء النظام معرفات. مثل

و| 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top