> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-trino-dialect.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق لنوع البيانات DateTime64 في ClickHouse، الذي يخزّن الطوابع الزمنية بدقة أجزاء من الثانية

# DateTime64

يتيح تخزين نقطة زمنية يمكن التعبير عنها كتاريخ تقويمي ووقت من اليوم، مع دقة محددة لأجزاء من الثانية

حجم الـtick (precision): ‏10<sup>-precision</sup> ثانية. النطاق الصالح: \[ 0 : 9 ].
وعادةً ما تُستخدم القيم: 3 (ميلي ثانية)، 6 (ميكروثانية)، 9 (نانوثانية).

القيمة الافتراضية: 3 (ميلي ثانية).

**الصياغة:**

```sql theme={null}
DateTime64(precision, [timezone])
```

داخليًا، يخزّن البيانات على شكل عدد من 'ticks' منذ بداية epoch ‏(1970-01-01 00:00:00 UTC) بصيغة Int64. ويتحدد مستوى دقة الـ tick بواسطة المعلَمة precision. بالإضافة إلى ذلك، يمكن للنوع `DateTime64` تخزين منطقة زمنية واحدة للعمود بأكمله، ما يؤثر في كيفية عرض قيم النوع `DateTime64` بتنسيق نصي وكيفية تفسير القيم المحددة كسلاسل نصية ('2020-01-01 05:00:01.000'). لا تُخزَّن المنطقة الزمنية في صفوف الجدول (أو في مجموعة النتائج)، بل تُخزَّن في البيانات الوصفية للعمود. راجع التفاصيل في [DateTime](/ar/reference/data-types/datetime).

النطاق المدعوم للقيم: \[0000-01-01 00:00:00, 9999-12-31 23:59:59.999999999]

يعتمد عدد الخانات بعد الفاصلة العشرية على المعلَمة precision.

ملاحظة: النطاق الكامل أعلاه متاح لدقة تصل إلى 7. وبما أن ticks تُخزَّن في `Int64`، فإن الدقات الأعلى تغطي نطاقًا أضيق: عند الدقة 8 تكون القيمة القصوى تقريبًا `4892-10-07`، وعند استخدام الدقة القصوى البالغة 9 خانات (نانوثانية) يكون النطاق المدعوم من `1677-09-21 00:12:44` إلى `2262-04-11 23:47:16` بتوقيت UTC.

<div id="examples">
  ## أمثلة
</div>

1. إنشاء جدول يحتوي على عمود من النوع `DateTime64` وإدراج البيانات فيه:

```sql theme={null}
CREATE TABLE dt64
(
    `timestamp` DateTime64(3, 'Asia/Istanbul'),
    `event_id` UInt8
)
ENGINE = MergeTree;
```

```sql theme={null}
-- Parse DateTime64
-- - from an integer interpreted as the number of seconds since 1970-01-01 (like DateTime),
-- - from a decimal interpreted as the number of seconds, the fractional part giving sub-second precision,
-- - from a string.

INSERT INTO dt64
VALUES
(1546300800, 1),
(1546300800.123, 2),
('2019-01-01 00:00:00', 3);

SELECT * FROM dt64;
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.000 │        1 │
│ 2019-01-01 03:00:00.123 │        2 │
│ 2019-01-01 00:00:00.000 │        3 │
└─────────────────────────┴──────────┘
```

* عند إدراج `datetime` كعدد، يُتعامل معه على أنه Unix timestamp ‏(UTC) بالثواني، كما في `DateTime`. تمثل `1546300800` القيمة `'2019-01-01 00:00:00'` بتوقيت UTC. ومع ذلك، بما أن العمود `timestamp` محددة له المنطقة الزمنية `Asia/Istanbul` ‏(UTC+3)، فعند إخراجه كسلسلة نصية ستظهر القيمة بالشكل `'2019-01-01 03:00:00'`. يعمل إدراج عدد ذي جزء كسري بالطريقة نفسها: الجزء قبل الفاصلة العشرية هو Unix timestamp بالثواني، ويوفر الجزء بعدها دقة أجزاء من الثانية وفقًا لدقة العمود. (قبل الإصدار 26.8، كان العدد الصحيح المجرّد غير الموضوع بين علامتَي اقتباس في مسارات الإدخال `JSON` و`Values`/`Quoted` — ويشمل الأخير كل تنسيق يحلل الحقول باستخدام قاعدة الإفلات `Quoted`: وهي `Values` و`MySQLDump` و`Template`/`CustomSeparated`/`Regexp` المهيأة بإفلات الحقول `Quoted` — يُفسَّر بدلًا من ذلك على أنه القيمة الخام الأساسية بدقة العمود، لذا كانت `1546300800000` عند الدقة 3 تعني `'2019-01-01 00:00:00'`. لاستعادة السلوك السابق في هذه المسارات، اضبط `input_format_read_datetime_number_as_raw_value = 1` (أو `SET compatibility = '26.7'`)؛ يؤثر ذلك أيضًا في الدالة `JSONExtract` ونوع البيانات `JSON`. ينطبق إعداد التوافق على عدد صحيح مجرّد فقط: ففي تنسيق `Values`، يعود العدد الكسري، الذي يرفضه محلل البث القديم، إلى تقييم تعبير SQL ويُقرأ بالثواني — كما هو الحال في الإصدارات السابقة للإصدار 26.8. في `JSONExtract` ونوع البيانات `JSON`، تُحلل القيمة الكسرية عبر `Float64`، لذا قد يُقرَّب الطابع الزمني الذي يحتوي على أرقام أكثر مما يمكن لـ `Float64` الاحتفاظ به إلى القيمة المجاورة، بخلاف تنسيقات إدخال الصفوف التي تحلل النص الأصلي بدقة. لا يحكم هذا الإعداد تنسيقات إدخال النص المفصول بعلامات الجدولة وCSV وغيرها من تنسيقات النص ذات الإفلات، وتحتفظ بتفسيرها الحالي للعدد غير الموضوع بين علامتَي اقتباس: تُقرأ القيمة الكبيرة على أنها tick.)
* عند إدراج قيمة نصية كسمة `datetime`، يُتعامل معها على أنها ضمن المنطقة الزمنية الخاصة بالعمود. ستُعامل `'2019-01-01 00:00:00'` على أنها ضمن المنطقة الزمنية `Asia/Istanbul`، وتُخزَّن على أنها `1546290000000`.

2. التصفية على قيم `DateTime64`

```sql theme={null}
SELECT * FROM dt64 WHERE timestamp = toDateTime64('2019-01-01 00:00:00', 3, 'Asia/Istanbul');
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 00:00:00.000 │        3 │
└─────────────────────────┴──────────┘
```

بخلاف `DateTime`، لا تُحوَّل قيم `DateTime64` تلقائيًا من `String`.

```sql theme={null}
SELECT * FROM dt64 WHERE timestamp = toDateTime64(1546300800.123, 3);
```

```text theme={null}
┌───────────────timestamp─┬─event_id─┐
│ 2019-01-01 03:00:00.123 │        1 │
│ 2019-01-01 03:00:00.123 │        2 │
└─────────────────────────┴──────────┘
```

كما هو الحال عند إدراج رقم، تتعامل الدالة `toDateTime64` مع الوسيط الرقمي باعتباره عددًا من الثواني، لذا يجب تحديد دقة أجزاء من الثانية
بعد العلامة العشرية.

3. الحصول على المنطقة الزمنية لقيمة من نوع `DateTime64`:

```sql theme={null}
SELECT toDateTime64(now(), 3, 'Asia/Istanbul') AS column, toTypeName(column) AS x;
```

```text theme={null}
┌──────────────────column─┬─x──────────────────────────────┐
│ 2023-06-05 00:09:52.000 │ DateTime64(3, 'Asia/Istanbul') │
└─────────────────────────┴────────────────────────────────┘
```

4. تحويل المنطقة الزمنية

```sql theme={null}
SELECT
toDateTime64(timestamp, 3, 'Europe/London') AS lon_time,
toDateTime64(timestamp, 3, 'Asia/Istanbul') AS istanbul_time
FROM dt64;
```

```text theme={null}
┌────────────────lon_time─┬───────────istanbul_time─┐
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2019-01-01 00:00:00.123 │ 2019-01-01 03:00:00.123 │
│ 2018-12-31 21:00:00.000 │ 2019-01-01 00:00:00.000 │
└─────────────────────────┴─────────────────────────┘
```

**راجع أيضًا**

* [دوال تحويل أنواع البيانات](/ar/reference/functions/regular-functions/type-conversion-functions)
* [دوال التعامل مع التواريخ والأوقات](/ar/reference/functions/regular-functions/date-time-functions)
* [إعداد `date_time_input_format`](/ar/reference/settings/formats/date-time#date_time_input_format)
* [إعداد `date_time_output_format`](/ar/reference/settings/formats/date-time#date_time_output_format)
* [معلمة تهيئة الخادم `timezone`](/ar/reference/settings/server-settings/settings/other#timezone)
* [إعداد `session_timezone`](/ar/reference/settings/session-settings/other#session_timezone)
* [العوامل الخاصة بالتعامل مع التواريخ والأوقات](/ar/reference/operators/index#operators-for-working-with-dates-and-times)
* [نوع البيانات `Date`](/ar/reference/data-types/date)
* [نوع البيانات `DateTime`](/ar/reference/data-types/datetime)
