sql-server - كامل - الفرق بين اصدارات sql server



مقارنة سلسلة التاريخ إلى داتيتيم في سكل سيرفر؟ (12)

التقنية 2:

DECLARE @p_date DATETIME
SET     @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT  *
FROM    table1
WHERE   DATEDIFF( d, column_datetime, @p_date ) = 0

إذا لم يتم فهرسة الحقل column_datetime، ومن غير المحتمل أن يكون (أو من غير المرجح استخدام الفهرس)، فإن استخدام داتديف () أقصر.

في سكل سيرفر لدي عمود DATETIME الذي يتضمن عنصر الوقت.

مثال:

'14 AUG 2008 14:23:019'

ما هي أفضل طريقة لتحديد السجلات فقط ليوم معين، وتجاهل الجزء الوقت؟

مثال: (غير آمن، حيث إنه لا يتطابق مع الجزء الزمني ولا يعرض أي صفوف)

DECLARE  @p_date DATETIME
SET      @p_date = CONVERT( DATETIME, '14 AUG 2008', 106 )

SELECT *
FROM   table1
WHERE  column_datetime = @p_date

ملاحظة: نظرا لهذا الموقع هو أيضا حول تدوين الملاحظات والأساليب التي تلتقط ثم ننسى، وأنا ذاهب إلى الرد على إجابتي على هذا السؤال كما داتيتيم الاشياء في مسكل هو على الارجح الموضوع I البحث معظم في سلبول.

تحديث مثال توضيحي ليكون أكثر تحديدا.

تحرير عذرا، ولكن كان لي إلى أسفل وزارة الدفاع إجابات الخطأ (الإجابات التي ترجع نتائج خاطئة).

Jorrit: WHERE (date>'20080813' AND date<'20080815') سيعود الثالث عشر والرابع عشر.

wearejimbo: إغلاق، ولكن لا السيجار! شارة تمنح لك. فاتك التسجيلات المكتوبة في 14/08/2008 23: 59: 001 إلى 23: 59: 999 (أي أقل من ثانية واحدة قبل منتصف الليل).


Answer #1

شيء من هذا القبيل؟

SELECT  *
FROM    table1
WHERE   convert(varchar, column_datetime, 111) = '2008/08/14'

Answer #2

وأنا أعلم أن هذا ليس بالضبط كيف تريد أن تفعل هذا، ولكن يمكن أن يكون بداية:

SELECT *
FROM (SELECT *, DATEPART(yy, column_dateTime) as Year, 
      DATEPART(mm, column_dateTime) as Month, 
      DATEPART(dd, column_dateTime) as Day 
      FROM table1)
WHERE Year = '2008'
AND Month = '8'
AND Day = '14'

Answer #3

يلقي هذا الدالة كاست (فلور (كاست) (جيتدات () أس فلوت)) ك داتيتيم) نوع بيانات داتيتيم مع إزالة جزء الوقت ويمكن استخدامه على هذا النحو.

Select
*
Table1
Where
Cast(Floor(Cast(Column_DateTime As Float)) As DateTime) = '14-AUG-2008'

أو

DECLARE  @p_date DATETIME
SET      @p_date = Cast('14 AUG 2008' as DateTime)

SELECT   *
FROM     table1
WHERE    Cast(Floor(Cast(column_datetime As Float)) As DateTime) = @p_date

Answer #4

في سكل سيرفر 2008، يمكنك استخدام نوع البيانات ديت جديد

DECLARE @pDate DATE='2008-08-14'  

SELECT colA, colB
FROM table1
WHERE convert(date, colDateTime) = @pDate  

@شاب. أعتقد أنك سوف تجد أن هذا الحل المقاييس على ما يرام. ألق نظرة على خطة تنفيذ الاستعلام لطلب البحث الأصلي.

ومن أجل الألغام :


Answer #5

كيفية الحصول على جزء ديت من حقل داتيتيم في مس سكل سيرفر:

واحدة من أسرع وأسرع طرق للقيام بذلك يستخدم

DATEADD(dd, DATEDIFF( dd, 0, @DAY ), 0)

فإنه يتجنب وحدة المعالجة المركزية خرق "تحويل التاريخ إلى سلسلة دون الوقت ومن ثم تحويلها مرة أخرى" المنطق.

كما أنه لا يعرض التنفيذ الداخلي أن "جزء الوقت يعبر عنه ككسر" من التاريخ.

احصل على تاريخ اليوم الأول من الشهر

DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0)

الحصول على تاريخ رفوم 1 سنة مضت

DATEADD(m,-12,DATEADD(dd, DATEDIFF( dd, -1, GetDate() - DAY(GetDate()) ), 0))

Answer #6

يمكن مقارنة التاريخ في سكلسيرفر باستخدام سلسلة المقارنة: على سبيل المثال

DECLARE @strDate VARCHAR(15)
SET @strDate ='07-12-2010'


SELECT * FROM table
WHERE CONVERT(VARCHAR(15),dtInvoice, 112)>= CONVERT(VARCHAR(15),@strDate , 112)

Answer #7

أنا عادة تحويل التاريخ الوقت حتى الآن ومقارنتها، مثل هذه:

SELECT 'Same Date' WHERE CAST(getDate() as date) = cast('2/24/2012 2:23 PM' as date)

أو

SELECT 'Same Date' WHERE DATEDIFF(dd, cast(getDate() as date), cast('2/24/2012 2:23 PM' as date)) = 0

Answer #8

أفضل طريقة هي ببساطة استخراج جزء التاريخ باستخدام سكل ديت () الدالة:

SELECT * 
FROM table1
WHERE DATE(column_datetime) = @p_date;

Answer #9

في سكلسيرفر

DECLARE @p_date DATE

SELECT * 
FROM table1
WHERE column_dateTime[email protected]p_date

في C # تمرير السلسلة القصيرة من قيمة التاريخ باستخدام الدالة توشورداتسترينغ (). سامبل: DateVariable.ToShortDateString ()؛


Answer #10
SELECT CONVERT(VARCHAR(2),DATEPART("dd",doj)) + 
    '/' + CONVERT(VARCHAR(2),DATEPART("mm",doj)) + 
    '/' + CONVERT(VARCHAR(4),DATEPART("yy",doj)) FROM emp

Answer #11
SELECT * FROM tablename
WHERE CAST(FLOOR(CAST(column_datetime AS FLOAT))AS DATETIME) = '30 jan 2012'




datetime