it-swarm.asia

كيفية الحصول على التاريخ الحالي بدون جزء الوقت

في SQL Server 2005 كيف أحصل على التاريخ الحالي بدون جزء الوقت؟ كنت أستخدم GETDATE() ولكني أريد أن يكون لها وقت 00: 00: 00.0

88
Piers Myers

الأسرع إذا كان عليك التكرار عبر مجموعة سجلات وليس لديك تاريخ في SQL Server 2008

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)

هناك إجابتان مختلفتان وممتازتان على StackOverflow تؤكد ذلك: واحد ، اثنان

تحويلات Varchar هي واحدة من أسوأ الطرق للقيام بذلك. بالطبع ، لقيمة واحدة ، قد لا يهم ولكن من الجيد الدخول إليها.

هذه الطريقة حتمية أيضًا ، لنقل إذا كنت تريد فهرسة عمود محسوب. حتى الأشخاص الذين يكتبون كتبًا عن SQL Server يحصلون على تم اكتشافهم من خلال تحويلات التاريخ والوقت

هذه التقنية قابلة للتمديد أيضًا.

  • أمس: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • بداية الشهر: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • نهاية الشهر الماضي: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • بداية الشهر القادم: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)

تعديل:

كما ذكرت عن الحتمية ، فإن طرق varchar ليست آمنة ما لم تستخدم النمط 112.

تشير الإجابات الأخرى هنا إلى أنك لن تطبق هذا أبدًا على عمود. هذا صحيح ، ولكن قد ترغب في تحديد 100 ألف صف أو إضافة عمود محسوب أو GROUP BY بالتاريخ فقط. ثم عليك استخدام هذه الطريقة.

الجواب الآخر يذكر أيضًا النمط 110. هذه ليست لغة أو SET DATEFORMAT آمنة وتفشل مع إعداد اللغة "البريطانية". انظر الدليل النهائي لأنواع بيانات التاريخ بواسطة Tibor Karaszi.

125
gbn

يجب عليك تحويله إلى varchar مع تحديد نمط تنسيق (110 في هذه الحالة) ثم تحويل (أو إرسال) مرة أخرى إلى datetime.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
6
mrdenny