كيفية الحصول على بيانات آخر 30 يومًا من تاريخ اليوم في خادم SQL

[ad_1]

لا بد لي من الحصول على سجل لجميع الصفوف من آخر 30 إلى اليوم. لقد حاولت هذا ولكن لا يعمل

ما حاولت:

حدد date_time من dsr_data حيث date_time >= CONVERT(Varchar(100)، DATEADD(DAY,-30,GETDATE()),103) and date_time <= CONVERT(varchar(100), getdate(),103)

الحل 3

SELECT date_time  FROM dsr_data
    WHERE date_time
               between DATEADD(DAY,-30,GETDATE()) and  GETDATE(); 

الحل 1

لماذا تستخدم التحويل؟
السبب الوحيد المحتمل هو نفس السبب الذي لا يعمل: أنت تقوم بتخزين التواريخ كأعمدة NVARCHAR بدلاً من DATE أو DATETIME أو DATETIME2.

عند مقارنة السلاسل، تعتمد المقارنة كليًا على أول حرف مختلف في السلسلتين: وبما أنك تحدد على وجه التحديد تنسيق التاريخ بتنسيق 103، وهو “dd/MM/yyyy”، فستكون المقارنة غير هامة تمامًا – سيتم التحقق من السنة أخيرًا على سبيل المثال، فيكون 31/01/2017 قبل 31/12/1952 لأن المقارنة ستكون على أساس الرقم الأول في الشهر، و”0” أقل من “1”

تغيير قاعدة البيانات الخاصة بك. قم دائمًا بتخزين البيانات في أنواع البيانات المناسبة: وهذا يعني القيم الصحيحة في أعمدة INT، ومعلومات التاريخ في أعمدة DATE، أو DATETIME، أو DATETIME2، وما إلى ذلك. إذا لم تقم بذلك، فهذه مجرد المشكلة الأولى من بين العديد من المشاكل السيئة التي تنتظر أن تعضك في المستقبل…

الحل 2

استخدم الاستعلام أدناه.

SELECT date_time  FROM  dsr_data
WHERE date_time  >= DATEADD(day,-30, getdate()) 
and   date_time  <= getdate()

[ad_2]

コメント

タイトルとURLをコピーしました