ahmed_sa Ответов: 1

Как обрабатывать дату во временной таблице, когда она равна нулю или нет ?


Как обрабатывать дату во временной таблице, когда она равна нулю или нет ?

Я работаю на SQL server 2012, используя формат dd/mm/yyyy

Мне нужно обработать дату в таблице #temp на обоих из них от даты или до даты .

если у меня нуль на свидание или на сегодняшний день что я делаю

если кто-то пишет формат даты неправильно, как я делаю это как ДД/ММ/гггг

Что я уже пробовал:

create table #temp
(
masterId  int,
fromdate datetime,
todate   datetime
)
insert into #temp values
(1,'12/01/2017','05/06/2019'),
(2,'12/02/2018','12/07/2019'),
(3,null,'12/09/2019')


select * from pcn.MasterData M inner join #temp tmp on m.MasterDataID = tmp.masterId
WHERE (tmp.fromdate is null OR tmp.fromdate >= M.InsertionDate ) AND (tmp.ToDate IS NULL OR tmp.ToDate <=M.InsertionDate)

1 Ответов

Рейтинг:
11

MadMyche

Все это зависит от контекста использования этих данных и от того, какие бизнес-правила применяются к ним.

В одном из моих проектов есть необходимость вытащить документы на определенную дату, и данные имеют От/До точно такие же, как у вас, и есть некоторые нулевой ценности там есть.
Бизнес утверждает, что все, что имеет нулевую начальную дату, хорошо для всех дат до даты "до", а любые нулевые начальные даты хороши для любого времени после даты "от".
Таким образом, метод, используемый в моем случае, - это Коалесцирование (вы могли бы

Моя хранимая процедура, ищущая это, похожа на эту

DECLARE @DateDesired DATE = '04/15/2001'

SELECT  *
FROM    Documents
WHERE   @DateDesired >= Coalesce(FromDate, '01/01/1900')
AND     @DateDesired <= Coalesce(ToDate, '12/31/2500')
Я надеюсь, что это и статья ниже помогут вам определить, как вы будете справляться со своей ситуацией.

Ссылка:
COALESCE (Transact-SQL) - SQL Server | Microsoft Docs[^]


ahmed_sa

У меня есть insertiondate на столе есть formate dd/mm/yyyy

Мне нужно, когда пользователь пишет любой формат, отличный от dd/mm/yyyy

например, ММ/ДД/гггг или гггг/ММ/ДД

преобразование в ДД/ММ/гггг

Как это сделать, пожалуйста ?

MadMyche

Что вам нужно понять, так это разницу между "пользовательским интерфейсом" и базовыми данными. Семейство типов данных DATETIME фактически хранится в виде чисел, и именно пользовательский интерфейс переводит их в удобочитаемый формат.
Отображение даты для конечного пользователя зависит от пользовательского интерфейса, а разработчик приложения должен знать, в каком формате поступают данные.

Самое главное в датах и времени-это рассматривать их как свой собственный тип данных, а не как строки/varchars