it-swarm.dev

كيفية طرح 30 يومًا من التاريخ الحالي باستخدام SQL Server

لا يمكنني طرح 30 يومًا من التاريخ الحالي وأنا مبتدئ في SQL Server.

هذه هي البيانات في العمود الخاص بي

date 
------------------------------
Fri, 14 Nov 2014 23:03:35 GMT
Mon, 03 Nov 2014 15:18:00 GMT
Tue, 11 Nov 2014 01:24:47 GMT
Thu, 06 Nov 2014 19:13:47 GMT
Tue, 04 Nov 2014 12:37:06 GMT
Fri, 1 Nov 2014 00:33:00 GMT
Sat, 5 Nov 2014 01:06:00 GMT
Sun, 16 Nov 2014 06:37:12 GMT

لإنشاء العمود أعلاه ، استخدمت varchar(50) والآن مشكلتي هي أنني أرغب في عرض تواريخ الأيام الـ 15-20 الماضية من عمود التاريخ ، هل يمكن لأي شخص أن يساعد في هذه المشكلة؟ تحديث [كيف يمكنني عرض آخر 7 أيام التواريخ بالترتيب

41
Madpop

يمكنك تحويله إلى datetime ، ثم استخدام DATEADD(DAY, -30, date).

انظر هنا .

تحرير

أظن أن العديد من الأشخاص يجدون هذا السؤال لأنهم يريدون الاستغناء عن التاريخ الحالي (كما هو عنوان السؤال ، ولكن ليس المقصود من البروتوكول الاختياري). تعليق munyul أدناه يجيب على هذا السؤال بشكل أكثر تحديدا. نظرًا لأن التعليقات تعتبر أثيريًا (قد يتم حذفها في أي وقت من الأوقات) ، سأكررها هنا:

DATEADD(DAY, -30, GETDATE())
95
HoneyBadger

جرب هذا:

SELECT      GETDATE(), 'Today'
UNION ALL
SELECT      DATEADD(DAY,  10, GETDATE()), '10 Days Later'
UNION ALL
SELECT      DATEADD(DAY, –10, GETDATE()), '10 Days Earlier'
UNION ALL
SELECT      DATEADD(MONTH,  1, GETDATE()), 'Next Month'
UNION ALL
SELECT      DATEADD(MONTH, –1, GETDATE()), 'Previous Month'
UNION ALL
SELECT      DATEADD(YEAR,  1, GETDATE()), 'Next Year'
UNION ALL
SELECT      DATEADD(YEAR, –1, GETDATE()), 'Previous Year'

مجموعة النتائج:

———————– —————
2011-05-20 21:11:42.390 Today
2011-05-30 21:11:42.390 10 Days Later
2011-05-10 21:11:42.390 10 Days Earlier
2011-06-20 21:11:42.390 Next Month
2011-04-20 21:11:42.390 Previous Month
2012-05-20 21:11:42.390 Next Year
2010-05-20 21:11:42.390 Previous Year
7
Muhammad Awais

جرب هذا:

أضف قيمة VARCHAR إلى DATETIME وأضف -30 للطرح. أيضًا ، في sql-server ، لم يتم تحويل التنسيق الجمعة ، 14 نوفمبر 2014 23:03:35 بتوقيت جرينتش إلى DATETIME. حاول سلسلة فرعية لذلك:

SELECT DATEADD(dd, -30, 
       CAST(SUBSTRING ('Fri, 14 Nov 2014 23:03:35 GMT', 6, 21) 
       AS DATETIME))
7
Veera
SELECT DATEADD(day,-30,date) AS before30d 
FROM...

لكن يوصى بشدة بالاحتفاظ بالتاريخ في عمود تاريخ الوقت ، وليس varchar.

2
i486