Точного решения вашего вопроса не существует.Проблема в первую очередь в том, что вы сохраняете дату как строку (nvarchar), а не как тип данных DateTime .Вы можете сделать это, но это делает вашу жизнь излишне трудной, потому что вам нужно каким-то образом перестроить все функции, которые SQL уже реализовал.Кроме того, база данных не может гарантировать, что ожидаемые значения сохраняются приложением.В новой версии разработчик решает использовать «12-12-2018», а не «12.12 2018», а затем?
Чтобы избежать ловушек неточностей и неопределенностей, рекомендуется следующий подход.
CREATE TABLE [dbo].[FactSales](
[SalesOrderNumber] [int] NOT NULL,
[ItemNumber] [int] NOT NULL,
[OrderQuantity] [int] NOT NULL,
[SalesAmount] [money] NOT NULL,
[SalesDate] [datetime] NOT NULL,
CONSTRAINT [PK_FactSales] PRIMARY KEY CLUSTERED
(
[SalesOrderNumber] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO [dbo].[FactSales]
([SalesOrderNumber]
,[ItemNumber]
,[OrderQuantity]
,[SalesAmount]
,[SalesDate])
VALUES
(1,1000,1,140.10,'2018-06-30 10:34:09'),
(2,1005,10,40.10,'2018-07-30 1:34:09'),
(3,1005,12,150.10,'2018-07-30 11:34:09'),
(4,1009,3,199.10,'2018-08-30 11:34:09')
Дата продажи сохраняется как DateTime.Для дальнейшего анализа, составления отчетов или использования в вашем хранилище данных вы можете извлечь месяц и год с помощью функций SQL:
SELECT *, datepart(month, SalesDate) as SalesMonth, datepart(year, SalesDate) as SalesYear From FactSales;