Майже всі відповіді та зауваження були важкими щодо плюсів і світла проти мінусів. Ось резюме всіх плюсів і мінусів поки що, а також деякі найважливіші мінуси (у №2 нижче), які я бачив лише один раз, або взагалі немає.
- ПРО:
1.1. Більше ISO-сумісний (ISO 8601) (хоча я не знаю, як це на практиці втілюється).
1.2. Більш широкий діапазон (1/1/0001 до 31.12.9999 проти 1/1 / 1753-12 / 31/9999) (хоча додатковий діапазон, весь до 1753 року, ймовірно, не буде використовуватися, за винятком напр., в історичних, астрономічних, геологічних тощо програмах).
1.3. Точно відповідає діапазону діапазону типу .NET DateTime
(хоча і конвертувати вперед і назад, не маючи спеціального кодування, якщо значення знаходяться в межах діапазону цільового типу, і точність, за винятком Con # 2.1, нижче помилки / округлення відбудеться).
1.4. Більш точна (100 наносекунд, приблизно 0,000,000,1 сек. Проти 3,33 мілісекунди ака 0,003,33 сек.) (Хоча додаткова точність, ймовірно, не буде використана, за винятком, наприклад, в інженерних / наукових програмах).
1.5. Якщо налаштовано на аналогічну (як в 1 мілісек не "таку саму" (як у 3,33 мілісек), як стверджував Іман Абіді), точність, як DateTime
і менше місця (7 проти 8 байт), але тоді, звичайно, ви втратите точність вигоди, яка є, ймовірно, однією з двох (інша - найрізноманітнішою), яка найбільше рекламується, хоча й є ймовірною непотрібною вигодою).
- Мінуси:
2.1. При передачі параметра в .NET SqlCommand
, ви повинні вказати, System.Data.SqlDbType.DateTime2
чи може ви передавати значення за межами DateTime
діапазону та / або точності сервера SQL , оскільки воно за замовчуванням System.Data.SqlDbType.DateTime
.
2.2. Неможливо неявно / легко перетворити на числове число з плаваючою комою (# днів з моменту мінімальної дати-часу), щоб виконати наступні дії для / з ним у виразах SQL Server, використовуючи числові значення та оператори:
2.2.1. додати або відняти # днів або часткових днів. Примітка: Використання DateAdd
Функції як вирішення не є тривіальним, коли вам потрібно розглянути кілька, якщо не всі частини дати-часу.
2.2.2. прийняти різницю між двома датами для розрахунку "віку". Примітка: Ви не можете просто використовувати DateDiff
функцію SQL Server замість цього, оскільки вона не обчислює так, age
як очікували б більшість людей у тому випадку, якщо два дні дати відбудуться для перетину межі дати та часу календаря / часу одиниць, визначених, навіть якщо для крихітного дробу цієї одиниці, вона поверне різницю як 1 цієї одиниці проти 0. Наприклад, DateDiff
у Day
двох датах раз лише 1 мілісекунда один від одного поверне 1 проти 0 (днів), якщо ці дати у різні календарні дні (тобто "1999-12-31 23: 59: 59.9999999" та "2000-01-01 00: 00: 00.0000000"). Ці ж 1-мілісекундна різниця дат-разів, якщо їх перемістити так, що вони не перетинають календарний день, поверне "DateDiff" через Day
0 (днів).
2.2.3. візьміть Avg
дату-раз (у сукупному запиті), просто перейшовши спочатку на "Плаваючий", а потім знову на DateTime
.
ПРИМІТКА. Щоб перетворитись DateTime2
на число, вам доведеться зробити щось на зразок наступної формули, яка все ще передбачає, що ваші значення не менше 1970 року (це означає, що ви втрачаєте весь додатковий діапазон плюс ще 217 років. Примітка. Ви можете не зможете просто скорегувати формулу, щоб забезпечити додатковий діапазон, оскільки у вас можуть виникнути проблеми із числовим переповненням.
25567 + (DATEDIFF(SECOND, {d '1970-01-01'}, @Time) + DATEPART(nanosecond, @Time) / 1.0E + 9) / 86400.0
- Джерело: " https://siderite.dev/blog/how-to-translate-t-sql-datetime2-to.html "
Звичайно, ви можете також Cast
в DateTime
перший (і при необхідності знову до DateTime2
), але ви втратите точність і діапазон (всі попередні роки 1753) вигоди від DateTime2
VS. DateTime
які Prolly 2 самих великих і також одночасно Prolly 2 найменш вірогідних необхідності, які задають питання, навіщо використовувати його, коли ви втрачаєте неявні / легкі перетворення на числові числа з плаваючою комою (# днів) для додавання / віднімання / "віку" (порівняно DateDiff
) / Avg
calcs, що є великим в моєму досвіді.
До речі, час Avg
дат є (або принаймні повинен бути) важливим випадком використання. а) Окрім використання для отримання середньої тривалості, коли для подання тривалості (загальної практики) використовуються дати-дати (оскільки загальна основна дата-час); б) також корисно отримати статистику типу інформаційної панелі щодо того, яка середня дата- час - у стовпці дата-час діапазону / групи рядків. в) Стандартний (або принаймні повинен бути стандартним) спеціальний запит для моніторингу / усунення несправностей у стовпці, який може бути недійсним ніколи / більше, та / або може бути необхідним для застарілого, - це перелік кожного значення кількості випадків і (якщо такі є) в Min
, Avg
і Max
штампи дати і часу , пов'язані з цим значенням.